Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MongoDB

MongoDB में ऑब्जेक्ट आईडी की सरणी पर $lookup कैसे करें?

MongoDB में $lookup का उपयोग करके ऑब्जेक्ट आईडी की सरणी वाले फील्ड पर लेफ्ट आउटर जॉइन करने के लिए, let के साथ सब-पाइपलाइन सिंटैक्स का उपयोग करें ताकि सरणी वेरिएबल बांध सके और $in के साथ $match कर सके।

उदाहरण: दो संग्रह

संग्रह 1 (demo395): उपयोगकर्ता दस्तावेज़

> db.demo395.insertOne({Name:"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e782317aa3ef9ab8ab207") }
> db.demo395.insertOne({Name:"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e782317aa3ef9ab8ab208") }

संग्रह 2 (demo396): ObjectId सरणी वाला दस्तावेज़

> db.demo396.insertOne({
    "details" : [
        ObjectId("5e5e782317aa3ef9ab8ab207"),
        ObjectId("5e5e782317aa3ef9ab8ab208")
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5e787817aa3ef9ab8ab209") }

दस्तावेज़ देखना

> db.demo395.find();
> db.demo396.find();

$lookup साथ पाइपलाइन (MongoDB 3.6+)

> db.demo396.aggregate([
    { $lookup: {
        from: "demo395",
        let: { details: "$details" },
        pipeline: [
            { $match: { $expr: { $in: [ "$_id", "$$details" ] } } }
        ],
        as: "output"
    }}
]);

परिणाम

{
    "_id" : ObjectId("5e5e787817aa3ef9ab8ab209"),
    "details" : [
        ObjectId("5e5e782317aa3ef9ab8ab207"),
        ObjectId("5e5e782317aa3ef9ab8ab208")
    ],
    "output" : [
        { "_id" : ObjectId("5e5e782317aa3ef9ab8ab207"), "Name" : "Chris" },
        { "_id" : ObjectId("5e5e782317aa3ef9ab8ab208"), "Name" : "David" }
    ]
}

चरण व्याख्या

  1. from: लक्ष्य संग्रह (demo395)।
  2. let: पाइपलाइन के लिए details सरणी को $$details के रूप में बांधता है।
  3. pipeline: जॉइन की गई संग्रह पर चलाने के लिए सब-पाइपलाइन।
  4. $match + $expr + $in: demo395 में दस्तावेज़ फ़िल्टर करता है जहां _id $$details सरणी में है।
  5. as: आउटपुट फील्ड नाम (output)।

सरल $lookup (MongoDB 3.2, सरणी के लिए नहीं)

पुराना सिंटैक्स {$lookup:{from, localField, foreignField, as}} सरणी localField के साथ काम करता है लेकिन foreignField सरणी नहीं हो सकता; यह सरणी तत्वों के विरुद्ध मिलान करता है। ऊपर दिया गया पाइपलाइन सिंटैक्स अधिक लचीला है।

प्रदर्शन

  • विदेशी संग्रह पर _id इंडेक्स सुनिश्चित करें (डिफ़ॉल्ट)।
  • बड़ी सरणी के लिए, पाइपलाइन में $limit जोड़ने पर विचार करें।
  1. - MongoDB में ऑब्जेक्ट ऐरे से आइटम कैसे प्राप्त करें?

    ऑब्जेक्ट ऐरे से आइटम प्राप्त करने के लिए aggregate() का उपयोग करें। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo459.insertOne( ... { "_id" : 1, ... "Information" : [ ...    { ...         "Name" : "Chris", ...    

  1. - MongoDB क्वेरी: इंडेक्स N पर ऐरे ऑब्जेक्ट अपडेट करें

    MongoDB में ऐरे ऑब्जेक्ट अपडेट करने के लिए update() का उपयोग करें। डॉट नोटेशन का उपयोग भी आवश्यक है। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo489.insertOne( ... { ... ... ...    details : [{ ...       id : 101, ...       "Info1" : { ... &

  1. - MongoDB में सरणी ऑब्जेक्ट के साथ सरणी तत्व के मान को बढ़ाएं

    सरणी ऑब्जेक्ट के मान को बढ़ाने के लिए, $inc का उपयोग करें। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: >db.demo506.insertOne({details:[{id:1,Quantity:4},{id:2,Quantity:3},{id:3,Quantity:2},{id:4,Quantity:7}]}); { acknowledged : true, insertedId : ObjectId(5e882ed6987b6e0e9d18f576) } find() मेथड की मद