MongoDB क्वेरी को Node.js ड्राइवर प्रारूप से Mongoose प्रारूप में कैसे अनुकूलित करें
मैं Mongoose का उपयोग करके किसी क्वेरी के लिए सिंटैक्स के साथ कुछ मदद की सराहना करूंगा।
मेरे पास यह क्वेरी है जो ऑब्जेक्ट आईडी के नेस्टेड सरणी से एक ऑब्जेक्ट को हटाने के लिए MongoDB Node.js ड्राइवर का उपयोग करके अच्छी तरह से चलता है:
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();
});
जब मैं Mongoose स्कीमा का उपयोग करके क्वेरी को चलाने का प्रयास करता हूं, तो क्वेरी ऑब्जेक्ट को ऑब्जेक्ट से निकाल नहीं पाती है, लेकिन यह किसी भी त्रुटि को नहीं फेंकती है:
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);
}
});
मानगो स्कीमा में इन क्षेत्रों के लिए स्कीमा इस प्रकार परिभाषित किया गया है:
groups:[
{
students:[
mongoose.Schema.Types.ObjectId
],
dateCreated: {
type: Date,
default: Date.now
}
}
]
जवाब
1 turivishal
आप स्ट्रिंग आईडी को ऑब्जेक्ट आईडी का उपयोग करके बदल सकते हैं 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); } }
);