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

शर्तों के साथ मोंगोडब एकत्रीकरण लुकअप

सबसे पहले, यह है all_category_id , नहीं category_id . दूसरे, आप लेखों को लिंक नहीं करते हैं - सभी दस्तावेज़ों में बिल्कुल समान article_category होगा सरणी। अंत में, आप शायद उन लेखों को फ़िल्टर करना चाहते हैं जिनका मिलान श्रेणी नहीं है। सशर्त पाइपलाइन इस तरह दिखनी चाहिए:

db.article.aggregate([
  { $match: {
      title: { $regex: /example/ }
  } },
  { $lookup: {
    from: "article_category",
    let: {
      article_id: "$article_id"
    },
    pipeline: [
      { $match: {
          $expr: { $and: [
              { $in: [ 8, "$all_category_id" ] },
              { $eq: [ "$article_id", "$$article_id" ] }
          ] }
      } }
    ],
    as: "article_category"
  } },
  { $match: {
    $expr: { $gt: [
      { $size: "$article_category"},
      0
    ] }
  } }
] )

अद्यतन करें:

अगर आप article_id . से मेल नहीं खाते हैं , $lookup समान article_category . के साथ परिणाम होगा सभी लेखों के लिए सरणी।

मान लें कि आपका article_category संग्रह में एक और दस्तावेज़ है:

{
  "article_id": 0,
  "all_category_id": [5,8,10]
}

{ $eq: [ "$article_id", "$$article_id" ] } के साथ पाइपलाइन में परिणामी article_category है

[ 
  { 
    "article_id" : 2015110920343902, 
    "all_category_id" : [ 5, 8, 10 ] 
  } 
]

बिना:

[ 
  { 
    "article_id" : 2015110920343902, 
    "all_category_id" : [ 5, 8, 10 ] 
  },
  {
    "article_id": 0,
    "all_category_id": [ 5, 8, 10 ]
  }
]

यदि बाद में वही है जो आपको चाहिए, तो अनुरोध ढूंढना आसान होगा:

db.article.find({ title: { $regex: /example/ } })

और

db.article_category.find({ all_category_id: 8 })


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $ पहले मोंगोडब में

  2. नोडज से मोंगोडब में वस्तु की एक बड़ी सरणी सम्मिलित करना

  3. $अनविंड के बिना $लुकअप एकाधिक स्तर?

  4. php mongodb संग्रह में nth प्रविष्टि खोजें

  5. गोलंग + मोंगोडीबी एम्बेडेड प्रकार (किसी अन्य संरचना में एक संरचना एम्बेड करना)