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

MongoDB में ऐरे से अद्वितीय आइटम संयोजित करना

MongoDB एग्रीगेशन में $setDifference, $concatArrays और $addToSet का उपयोग करके अद्वितीय मान संयोजित करना

MongoDB में कई ऐरे से अद्वितीय मानों का संयोजन प्राप्त करने के लिए एग्रीगेशन पाइपलाइन में सेट ऑपरेटर्स का उपयोग करें।

उदाहरण: संग्रह और दस्तावेज़ बनाना

> db.demo420.insert({
  "details" : [ { "Value1":10, "Value2":20, "Value3":30 } ]
});
WriteResult({ "nInserted" : 1 })
> db.demo420.insert({
  "Info" : [ { "Value1":10, "Value2":20, "Value3":300 } ]
});
WriteResult({ "nInserted" : 1 })

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

> db.demo420.find();

आउटपुट:

{ "_id" : ObjectId("5e739a569822da45b30346dc"), "details" : [ { "Value1" : 10, "Value2" : 20, "Value3" : 30 } ] }
{ "_id" : ObjectId("5e739a569822da45b30346dd"), "Info" : [ { "Value1" : 10, "Value2" : 20, "Value3" : 300 } ] }

अद्वितीय मान संयोजित करने के लिए जटिल एग्रीगेशन

> db.demo420.aggregate([
  { "$project": {
    "_id": 0,
    "unique": {
      "$filter": {
        "input": {
          "$setDifference": [
            { "$concatArrays": [ "$Info.Value1", "$Info.Value2", "$Info.Value3" ] },
            []
          ]
        },
        "cond": { "$ne": [ "$$this", "" ] }
      }
    }
  }},
  { "$unwind": "$unique" },
  { "$group": {
    "_id": null,
    "uniqueArray": { "$addToSet": "$unique" }
  }}
])

आउटपुट:

{ "_id" : null, "uniqueArray" : [ 300, 20, 10 ] }

व्याख्या:

  1. $concatArrays - तीनों फील्ड्स के ऐरे जोड़ता है
  2. $setDifference - खाली ऐरे से अंतर (प्रभावी रूप से फ्लैट करता है)
  3. $filter - खाली स्ट्रिंग हटाता है
  4. $unwind - ऐरे को अलग दस्तावेज़ों में फैलाता है
  5. $addToSet - अद्वितीय मान संचित करता है

सरल और बेहतर दृष्टिकोण:

db.demo420.aggregate([
  {$project: {
    allValues: {
      $setUnion: [
        {$ifNull: ["$details.Value1", []]},
        {$ifNull: ["$details.Value2", []]},
        {$ifNull: ["$details.Value3", []]},
        {$ifNull: ["$Info.Value1", []]},
        {$ifNull: ["$Info.Value2", []]},
        {$ifNull: ["$Info.Value3", []]}
      ]
    }
  }}
])

या अलग संग्रह/दस्तावेज़ संरचना के लिए:

db.collection.aggregate([
  {$project: {allFields: {$objectToArray: "$$ROOT"}}},
  {$unwind: "$allFields"},
  {$unwind: {path: "$allFields.v", preserveNullAndEmptyArrays: true}},
  {$group: {_id: null, uniqueValues: {$addToSet: "$allFields.v"}}}
])

मुख्य ऑपरेटर्स: $setUnion, $addToSet, $concatArrays, $setDifference।

  1. - MongoDB कलेक्शन से यूनिक मान प्राप्त करें

    यूनिक मान प्राप्त करने और डुप्लिकेट को अनदेखा करने के लिए, MongoDB में distinct() का उपयोग करें। distinct() एक सिंगल कलेक्शन में निर्दिष्ट फील्ड के लिए विशिष्ट मान ढूंढता है और परिणाम को एक ऐरे में लौटाता है। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo704.insertOne({LanguageCode:hi});

  1. - MongoDB: एक दस्तावेज में दो ऐरे के भीतर यूनिक मान प्राप्त करें

    एक दस्तावेज में दो ऐरे के भीतर यूनिक मान प्राप्त करने के लिए, aggregate() में $setUnion का उपयोग करें। $setUnion दो या अधिक ऐरे लेता है और एक ऐरे लौटाता है जिसमें वे एलिमेंट होते हैं जो किसी भी इनपुट ऐरे में दिखाई देते हैं। आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं: > db.demo608.insertOne({List

  1. - C++ में दो ऐरे से अद्वितीय पेयर्स को अधिकतम करना

    समस्या कथन दो समान आकार N के ऐरे दिए गए हैं, उनके तत्वों का उपयोग करके अधिकतम संख्या में पेयर्स बनाएं, एक पहले ऐरे से और दूसरा दूसरे ऐरे से, जैसे कि प्रत्येक ऐरे से एक तत्व अधिकतम एक बार उपयोग किया जाता है और चुने गए तत्वों के बीच निरपेक्ष अंतर दिए गए तत्व K से कम या बराबर होता है। उदाहरण यदि इनपु