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 ] }
व्याख्या:
$concatArrays- तीनों फील्ड्स के ऐरे जोड़ता है$setDifference- खाली ऐरे से अंतर (प्रभावी रूप से फ्लैट करता है)$filter- खाली स्ट्रिंग हटाता है$unwind- ऐरे को अलग दस्तावेज़ों में फैलाता है$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।