MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB $ लुकअप पाइपलाइन मैच _id द्वारा काम नहीं कर रहा है

मैं _id से मिलान करने की कोशिश करने के लिए नेवला के साथ $lookup का उपयोग करते समय भी परेशानी में था क्योंकि मेरा संग्रह संदर्भ को एक स्ट्रिंग के रूप में संग्रहीत करता है, न कि एक ObjectId

मॉडल ए:{_id:ObjectId("xxx"), b_id:"eeeee"}

मॉडल बी:{_id:ObjectId("eeeee")}

MyCollectionA.aggregate([
   {
      $lookup: {
        from: "collectionb",
        let: {id: "$b_id"},
        pipeline: [{$match: {$expr: {$eq: ["$_id", "$$id"]}}}],
        as: b
      }
])

इस उदाहरण में b कभी नहीं भरा जाता है क्योंकि $$id को ObjectId के रूप में नहीं माना जाता है

बस $$id को किसी objectId और उसके काम करने में बदलने के लिए एक प्रोजेक्ट जोड़ें

MyCollectionA.aggregate([
   {
      $lookup: {
        from: "collectionb",
        let: {id: "$b_id"},
        pipeline: [
           {$project: {_id: 1, bid: {"$toObjectId": "$$id"}}},
           {$match: {$expr: {$eq: ["$_id", "$bid"]}}}
        ],
        as: b
      }
])

या विदेशी फ़ील्ड, लोकलफ़ील्ड के साथ:

MyCollectionA.aggregate([
   {
      $project:{
        _id: 1,
        b_id: {"$toObjectId": "$b_id"}
      }
   },
   {
      $lookup: {
        from: "collectionb",
        localField: "b_id",
        foreignField: "_id",
        as: b
      }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडब शुरू नहीं होगा

  2. MongoDB में एक सरणी में खोजें और मैचों की संख्या के आधार पर छाँटें

  3. किसी फ़ील्ड पर $dateFromString का उपयोग करते समय परिणाम में शून्य फ़ील्ड होने से बचें

  4. मोंगो में रूपांतरण फ्लोट करने के लिए int खोजें

  5. MongoDB लोड के तहत धीमा प्रदर्शन कर रहा है