MongoDB sorgusu Node.js sürücü biçiminden Mongoose biçimine nasıl uyarlanır
Aug 17 2020
Mongoose kullanan bir sorgu için söz dizimi konusunda biraz yardım almaktan memnun olurum.
İç içe geçmiş Nesne Kimliği dizisinden bir ObjectId kaldırmak için MongoDB Node.js sürücüsünü kullanarak iyi çalışan bu sorgum var:
let filter = { _id : new ObjectId('5f30b40839aab119f4b3e21d'), 'groups._id': new ObjectId('5f3a23ec3680923d04ff970c') };
let update = { $pull: { "groups.$.students": new ObjectId('5f1a57a9d433f86ec0750c2c') }};
client.db('database').collection('collection').findOneAndUpdate(filter, update, function(err, res) {
if (err) console.log(err);
console.log(JSON.stringify(res, null, 2));
client.close();
});
Sorguyu Mongoose Şeması kullanarak çalıştırmayı denediğimde, sorgu ObjectId'i diziden kaldırmıyor, ancak herhangi bir hata atmıyor:
let groupFilter = { _id: existingClassroom._id, 'groups._id': groupId };
let groupUpdate = { $pull: { "groups.$.students": existingUser._id } };
await Classroom.findOneAndUpdate(groupFilter, groupUpdate, {new: true}, async (err, doc) => {
if(err){
console.log(err);
}
});
Mongoose şeması, şu şekilde tanımlanan bu alanlar için şemaya sahiptir:
groups:[
{
students:[
mongoose.Schema.Types.ObjectId
],
dateCreated: {
type: Date,
default: Date.now
}
}
]
Yanıtlar
1 turivishal Aug 17 2020 at 16:19
Dize kimliğini kullanarak nesne kimliğine dönüştürebilirsiniz mongoose.Types.ObjectId
,
let groupFilter = {
_id: mongoose.Types.ObjectId(existingClassroom._id),
'groups._id': mongoose.Types.ObjectId(groupId)
};
let groupUpdate = {
$pull: { "groups.$.students": mongoose.Types.ObjectId(existingUser._id)
}
};
await Classroom.findOneAndUpdate(groupFilter, groupUpdate, { new: true },
async (err, doc) => { if (err) { console.log(err); } }
);
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'