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

MongoDB में दो सरणी को कैसे अनविंड करें?

MongoDB में एक ही दस्तावेज़ में दो (या अधिक) सरणी को अनविंड करने के लिए, क्रमिक $unwind चरणों का उपयोग करें। यह दोनों सरणी के तत्वों का कार्टेशियन उत्पाद बनाता है; वांछित जोड़े रखने के लिए $match के साथ फ़िल्टर करें।

उदाहरण: दो समानांतर सरणी वाला दस्तावेज़

> db.demo387.insertOne({
    "Name" : "101",
    "Details1" : [
        { Value:100, Value1:50, Value2:40 },
        { Value:200 },
        { Value:300 }
    ],
    "Details" : [
        { Value:100, Value1:30, Value2:26 },
        { Value:200 },
        { Value:300 }
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5d197022064be7ab44e7f8") }

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

> db.demo387.find().pretty();

आउटपुट: तीन तत्वों वाली दो सरणी।

एग्रीगेशन: दोनों अनविंड करें और Value द्वारा मिलान करें

> db.demo387.aggregate([
    { "$unwind": "$Details1" },
    { "$unwind": "$Details" },
    { "$match": { "$expr": { "$eq": [ "$Details1.Value", "$Details.Value" ] } } }
]);

परिणाम

{ "_id" : ObjectId("5e5d197022064be7ab44e7f8"), "Name" : "101", "Details1" : { "Value" : 100, "Value1" : 50, "Value2" : 40 }, "Details" : { "Value" : 100, "Value1" : 30, "Value2" : 26 } }
{ "_id" : ObjectId("5e5d197022064be7ab44e7f8"), "Name" : "101", "Details1" : { "Value" : 200 }, "Details" : { "Value" : 200 } }
{ "_id" : ObjectId("5e5d197022064be7ab44e7f8"), "Name" : "101", "Details1" : { "Value" : 300 }, "Details" : { "Value" : 300 } }

व्याख्या

  1. पहला $unwind: Details1 सरणी फैलाता है (3 दस्तावेज़)।
  2. दूसरा $unwind: Details सरणी फैलाता है (3 × 3 = 9 दस्तावेज़ - कार्टेशियन उत्पाद)।
  3. $match + $expr: केवल उन दस्तावेज़ों को रखता है जहां Details1.Value == Details.Value (3 दस्तावेज़)।

चेतावनी

  • दोनों अनविंड करने से कार्टेशियन उत्पाद बनता है; बड़ी सरणी के लिए यह विस्फोटक हो सकता है।
  • यदि सरणी समानांतर हैं (समान लंबाई, सूचकांक द्वारा संरेखित), तो $map के साथ $arrayElemAt या $zip (MongoDB 5.0+) का उपयोग करने पर विचार करें।
  • $zip उदाहरण (MongoDB 5.0+):
> db.demo387.aggregate([
    { $project: {
        pairs: { $zip: { inputs: [ "$Details1", "$Details" ] } }
    }},
    { $unwind: "$pairs" },
    { $replaceRoot: { newRoot: { $mergeObjects: [ "$$pairs.0", "$$pairs.1" ] } } }
]);
  1. - MongoDB में दो सरणियों को अनविंड करें

    अनविंड करने के लिए, $unwind का उपयोग करें। $unwind इनपुट दस्तावेज़ों से सरणी फ़ील्ड को डीस्ट्रक्चर करता है ताकि प्रत्येक तत्व के लिए एक दस्तावेज़ आउटपुट हो। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo515.insertOne( { details1: [ 4700100004 ], details2: [ Not Give

  1. - MongoDB में _id द्वारा समूह कैसे बनाएं

    MongoDB में _id द्वारा समूह बनाने के लिए, $group का उपयोग करें। आइए दस्तावेज़ों के साथ एक संग्रह बनाएं: > db.demo529.insertOne({Score:10}); { acknowledged : true, insertedId : ObjectId(5e8b1d5bef4dcbee04fbbbe4) } > db.demo529.insertOne({Score:20}); { acknowledged : true, insertedId : ObjectId(

  1. - MongoDB Query - Collection Rename करना

    MongoDB में collection rename करने के लिए renameCollection() का उपयोग करें। Collection बनाना > db.demo690.insertOne({_id:101,Name:Sam}); { acknowledged : true, insertedId : 101 } > db.demo690.insertOne({_id:102,Name:Mike}); { acknowledged : true, insertedId : 102 } > db.demo690.insertOne({