MongoDB क्वेरी को Node.js ड्राइवर प्रारूप से Mongoose प्रारूप में कैसे अनुकूलित करें

Aug 17 2020

मैं 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 Aug 17 2020 at 16:19

आप स्ट्रिंग आईडी को ऑब्जेक्ट आईडी का उपयोग करके बदल सकते हैं 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); } }
);