MongoDB एग्रीगेशन में $setUnion का उपयोग करके दो ऐरे मर्ज करना
$setUnion एग्रीगेशन ऑपरेटर दो या अधिक ऐरे लेता है और एक ऐरे लौटाता है जिसमें सभी इनपुट ऐरे के यूनिक एलिमेंट्स होते हैं (डुप्लिकेट हटाए गए, सेट यूनियन)।
नमूना डेटा बनाना
> db.mergeTwoArrayFieldDemo.insertOne({
"NaturalNumbers": [1,2,3,8,10,20,30],
"WholeNumbers": [0,1,2,63,78,20,45]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68e4057806ebf1256f11d") }
डॉक्यूमेंट देखना
> db.mergeTwoArrayFieldDemo.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5cd68e4057806ebf1256f11d"),
"NaturalNumbers" : [ 1, 2, 3, 8, 10, 20, 30 ],
"WholeNumbers" : [ 0, 1, 2, 63, 78, 20, 45 ]
}
ऐरे मर्ज करना
> db.mergeTwoArrayFieldDemo.aggregate([
{
"$project": {
"MergedArray": { "$setUnion": [ "$NaturalNumbers", "$WholeNumbers" ] }
}
}
]);
आउटपुट:
{ "_id" : ObjectId("5cd68e4057806ebf1256f11d"), "MergedArray" : [ 0, 1, 2, 3, 8, 10, 20, 30, 45, 63, 78 ] }
व्याख्या
$setUnion- दोनों ऐरे से यूनिक मानों को जोड़ता है, डुप्लिकेट हटाता है (उदाहरण के लिए, 1, 2, 20 दोनों में मौजूद हैं)।- परिणाम सॉर्टेड ऑर्डर में है (MongoDB सेट ऑपरेशन्स के लिए आउटपुट सॉर्ट करता है)।
- मूल डॉक्यूमेंट्स अपरिवर्तित रहते हैं; यह एक प्रोजेक्शन है।
अन्य सेट ऑपरेटर्स
| ऑपरेटर | परिणाम |
|---|---|
$setUnion | सभी यूनिक एलिमेंट्स (यूनियन) |
$setIntersection | सामान्य एलिमेंट्स (इंटरसेक्शन) |
$setDifference | पहले ऐरे में मौजूद एलिमेंट्स लेकिन दूसरे में नहीं |
$setIsSubset | बूलियन: पहला ऐरे दूसरे का सबसेट है? |
$setEquals | बूलियन: दोनों ऐरे में समान एलिमेंट्स हैं? |
डुप्लिकेट्स को संरक्षित करने के लिए (यूनियन के बजाय कंसीनिटेशन)
डुप्लिकेट्स साथ सभी एलिमेंट्स को संयोजित करने के लिए $concatArrays का उपयोग करें:
{ $project: { Merged: { $concatArrays: [ "$NaturalNumbers", "$WholeNumbers" ] } } }
मुख्य बिंदु
$setUnionडुप्लिकेट-मुक्त मर्ज के लिए आदर्श है।- दोनों ऐरे फील्ड्स समान डॉक्यूमेंट में मौजूद होने चाहिए (या $lookup के माध्यम से जुड़े हुए)।
- परिणामों को स्थायी रूप से संग्रहीत करने के लिए
$mergeया$outके साथ संयोजित करें।