मेरे नेवला एकत्रीकरण में, मुझे Unrecognized expression '$toObjectId' के रूप में त्रुटि मिल रही है। मेरा MongoDB संस्करण 4.2.5 है और नेवला संस्करण 5.9.6 है। दस्तावेज़ीकरण के अनुसार, यह ऑपरेटर 4.x संस्करण में उपलब्ध है और आदर्श रूप से इसे काम करना चाहिए था।

  const trips = await Tickets.aggregate([
              {$match: {trip: Utils.strToObjectId(tripid) }},
              {$project: {_id:0,status:1, bookedBy:1,name:1,totalFare:1, seats:1, mode:1 }},
              {$group: {_id: {$toObjectId:"$bookedBy"}, bookings: {$push: {status: "$status", mode:"$mode", name: "$name", from: "$sourceCity", to: "$destinationCity", seats: "$seats" ,fare: "$totalFare", pnr: "$shortid" }}  }},
              {$lookup: {from:"users", localField:"bookedBy", foreignField:"_id",as:"user"}},
              ]);

मेरे मामले में बुक किया गया स्ट्रिंग में परिवर्तित हो जाता है जो $ लुकअप पाइपलाइन में मेल नहीं खाता है। इसलिए इसे हल करने के लिए मैं इसे ऑब्जेक्ट आईडी में बदलने की कोशिश कर रहा हूं।

किसी भी मदद के सुझाव की सराहना की जाती है।

0
amyst 9 अप्रैल 2020, 07:20
सुनिश्चित नहीं है कि यह क्यों विफल हो रहा है !! यह Utils.strToObjectId(tripid) क्या लौटाता है? इसके अलावा, मुझे लगता है कि आपका $lookup काम नहीं करता है क्योंकि आप $group के बाद bookedBy फ़ील्ड को बनाए रखते हैं, आप चरण दर चरण हटा सकते हैं और जांच सकते हैं कि यह वास्तव में कहां विफल हो रहा है लेकिन मुझे लगता है कि समस्या नहीं है $group..
 – 
whoami
9 अप्रैल 2020, 09:01
कृपया बताएं कि bookedBy फ़ील्ड में क्या मान है? सिंटैक्स { $group: { _id: { $toObjectId: "$bookedBy"} सही है, इसे $group के साथ प्रयोग किया जाता है।
 – 
prasad_
9 अप्रैल 2020, 09:27
बुक में मेरे पास स्ट्रिंग प्रारूप में ऑब्जेक्ट आईडी है। जैसे "5e841a3fa9f5d872777aa476"
 – 
amyst
9 अप्रैल 2020, 11:29
स्ट्रिंग को नेवला ऑब्जेक्ट आईडी में कनवर्ट करना आसान कार्य है। नीचे कोड है const strToObjectId = (str)=>{ return mongoose.Types.ObjectId(str); }
 – 
amyst
9 अप्रैल 2020, 11:30
BookBy फ़ील्ड में ऑब्जेक्ट आईडी है लेकिन यह स्ट्रिंग प्रारूप में है। अगर मैं $ लुकअप लागू करता हूं तो यह मेल नहीं खा रहा है क्योंकि मोंगोडब में यह ऑब्जेक्ट आईडी है। इसलिए मैं अपने इनपुट को ObjectId $toObjectId . में बदलने का प्रयास कर रहा हूं
 – 
amyst
9 अप्रैल 2020, 11:32

2 जवाब

यदि आपको MongoDB द्वारा बनाई गई ऑब्जेक्ट आईडी तक पहुंचने में परेशानी हो रही है, तो आप अपनी अनूठी ऑब्जेक्ट आईडी क्यों नहीं बनाते और जहां चाहें वहां पहुंचें। इसका उपयोग करके आपको ऑब्जेक्ट आईडी में कनवर्ट करने के बारे में चिंता करने की आवश्यकता नहीं है। उदाहरण के लिए,

const MUUID = require('uuid-mongodb'); 
id: {
        type: 'object',
        unique: true,
        default: () => MUUID.v1().toString(),
    }

मैं अभी शुरुआत कर रहा हूँ। यदि मेरा उत्तर असुविधाजनक या अप्रासंगिक है तो मुझे खेद है। यह सिर्फ एक विचार है।धन्यवाद

0
naveen 9 अप्रैल 2020, 14:01

मुझे यह समस्या थी और मैं दो दिनों से इसके साथ कुश्ती कर रहा था,
मेरे लिए समाधान यह सुनिश्चित कर रहा था कि मेरा MongoDB अद्यतित है,

मैं MLab.com पर अपनी मेजबानी कर रहा था जिसने मुझे Mongo 3.6 प्रदान किया, जबकि $toObjectId केवल Mongo 4.0< br/>
मैंने अपने सर्वर को मोंगो एटलस में मुफ्त में माइग्रेट किया जिसने मुझे अद्यतित संस्करण प्रदान किया और सब कुछ सुचारू रूप से चला।

0
Bartłomiej Mogielski 18 अप्रैल 2020, 21:38