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

Mongodb, $lookup . के साथ कुल क्वेरी

किसी विशेष व्यक्ति दस्तावेज़ के लिए, आप populate() . का उपयोग कर सकते हैं

. की तरह कार्य करें
var query = mongoose.model("person").find({ "name": "foo" }).populate("projects.tags");

और यदि आप उदाहरण के लिए 'मोंगोडीबी' या 'नोड जेएस' के साथ कोई टैग रखने वाले किसी भी व्यक्ति की खोज करना चाहते हैं, तो आप populate() में क्वेरी विकल्प शामिल कर सकते हैं। फ़ंक्शन अधिभार के रूप में:

var query = mongoose.model("person").find({ "name": "foo" }).populate({
    "path": "projects.tags",
    "match": { "en": { "$in": ["MongoDB", "Node JS"] } }
});

यदि आप चाहते हैं कि सभी टैग "project.tags" . में मौजूद हों सभी व्यक्तियों के लिए, तो एकत्रीकरण ढांचा जाने का रास्ता है। इस पाइपलाइन को व्यक्ति संग्रह पर चलाने पर विचार करें और $lookup . का उपयोग करें टैग संग्रह पर बाईं ओर शामिल होने के लिए ऑपरेटर:

mongoose.model('person').aggregate([
    { "$unwind": "$projects" },
    { "$unwind": "$projects.tags" },
    {
        "$lookup": {
            "from": "tags",
            "localField": "projects.tags",
            "foreignField": "_id",
            "as": "resultingTagsArray"
        }
    },
    { "$unwind": "$resultingTagsArray" },
    {
        "$group": {
            "_id": null,
            "allTags": { "$addToSet": "$resultingTagsArray" },
            "count": { "$sum": 1 }
        }
    }
 ]).exec(function(err, results){
    console.log(results);
 })

किसी विशेष व्यक्ति के लिए $match . लागू करें दस्तावेज़ों को फ़िल्टर करने के पहले चरण के रूप में पाइपलाइन:

mongoose.model('person').aggregate([
    { "$match": { "name": "foo" } },
    { "$unwind": "$projects" },
    { "$unwind": "$projects.tags" },
    {
        "$lookup": {
            "from": "tags",
            "localField": "projects.tags",
            "foreignField": "_id",
            "as": "resultingTagsArray"
        }
    },
    { "$unwind": "$resultingTagsArray" },
    {
        "$group": {
            "_id": null,
            "allTags": { "$addToSet": "$resultingTagsArray" },
            "count": { "$sum": 1 }
        }
    }
 ]).exec(function(err, results){
    console.log(results);
 })

एक अन्य समाधान यदि आप MongoDB संस्करण>=2.6 या <=3.0 का उपयोग कर रहे हैं जिसमें $lookup के लिए समर्थन नहीं है ऑपरेटर को परिणामों को एकत्रीकरण के रूप में पॉप्युलेट करना है:

mongoose.model('person').aggregate([
    { "$unwind": "$projects" },
    { "$unwind": "$projects.tags" },    
    {
        "$group": {
            "_id": null,
            "allTags": { "$addToSet": "$projects.tags" }
        }
    }
 ], function(err, result) {
    mongoose.model('person')
    .populate(result, { "path": "allTags" }, function(err, results) {
        if (err) throw err;
        console.log(JSON.stringify(results, undefined, 4 ));
    });
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. CentOS 8 . पर MongoDB स्थापित करना

  2. $लुकअप ऑपरेटर का उपयोग करके एकाधिक शामिल होने की शर्तें

  3. त्रुटि:मोंगोडब को जोड़ने वाली खिड़कियों पर कोई यूनिक्स सॉकेट समर्थन नहीं है

  4. MongoDB BSON दस्तावेज़ आकार सीमा को समझना

  5. एक नेवला प्रतिक्रिया की वस्तु संपत्ति तक नहीं पहुँच सकता