क्या Mongoose में क्वेरी करना संभव है, जिसमें से दो खोज पैरामीटर ObjectIds (एक रेफरी होने के नाते) हैं?
उदाहरण के लिए, निम्न स्कीमा दी गई हैं:
var ObjectId = mongoose.Schema.ObjectId;
var fooSchema = new mongoose.Schema({
...
});
schemas.Foo = mongoose.model("Foo", fooSchema, "foo");
var barSchema = new mongoose.Schema({
fooId : { type: ObjectId, ref: "Foo" },
...
});
schemas.Bar = mongoose.model("Bar", barSchema, "bar");
मुझे उम्मीद है कि यह काम करेगा:
schemas.Bar.find({
_id : mongoose.Types.ObjectId(req.params.barId),
fooId : mongoose.Types.ObjectId(req.params.fooId)
},
function(err, result)
{
...
}
);
लेकिन यह एक खाली सेट देता है। उत्सुकता से, अगर मैं एक या दूसरे मापदंड को हटाता हूं तो यह काम करता है।
schemas.Bar.find({
_id : mongoose.Types.ObjectId(req.params.barId)
}, ...);
या ...
schemas.Bar.find({
fooId : mongoose.Types.ObjectId(req.params.fooId)
}, ...);
मुझसे यहां क्या गलत हो रहा है? मैं डेटाबेस में कच्चे डेटा को देख सकता हूं, फिर भी यदि मैं एक ही खोज में दोनों ऑब्जेक्ट्स का उपयोग करता हूं तो क्वेरी हमेशा खाली रहती है।
बहुत धन्यवाद
उत्तर:
उत्तर № 1 के लिए 1खैर लानत है, मैंने बस अपनी स्क्रीन पर घूरने के कुछ घंटों के बाद इसे हल किया।
जब आप एक बार दस्तावेज़ सम्मिलित करते हैं तो आपको करना होगास्पष्ट रूप से मानगो के संदर्भ में रेफरी मान एक ObjectId प्रतीत होता है, भले ही वह मान एक फू उदाहरण से आया हो जहां _id को ObjectId के रूप में परिभाषित किया गया है! जाओ आंकड़ा .. मुझे लगता है कि Mongoose एक स्ट्रिंग के लिए यह coerces अन्यथा?
(new schemas.Bar({
fooId : mongoose.Types.ObjectId(somePreviouslyRetrievedFoo._id),
...
})).save(...)
अंत में, यह काम करता है! आशा है कि यह दूसरों को उस पर ट्रिपिंग करने में मदद करता है!