MongoDB एग्रीगेशन में पूर्णांक सरणी को एकल स्ट्रिंग में जोड़ने के लिए (उदाहरण के लिए, विभाजक के साथ), $reduce के साथ $concat और $toString का उपयोग करें।
उदाहरण: पूर्णांक सरणी वाला दस्तावेज़
> db.demo377.insertOne({"ListOfIds":[1001,1002,1003,1004,1005,1006,1007]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a73462ae06a1609a00b0e") }
दस्तावेज़ देखना
> db.demo377.find().pretty();
आउटपुट: सात पूर्णांकों वाली सरणी।
एग्रीगेशन: "++" विभाजक के साथ जोड़ें
> db.demo377.aggregate([
{ "$project": {
"ListOfIds": {
"$let": {
"vars": {
"key": {
"$reduce": {
"input": "$ListOfIds",
"initialValue": "",
"in": { "$concat": [ "$$value", "++", { "$toString": "$$this" } ] }
}
}
},
"in": { "$substrCP": [ "$$key", 2, { "$strLenCP": "$$key" } ] }
}
}
}}
]);
परिणाम
{ "_id" : ObjectId("5e5a73462ae06a1609a00b0e"), "ListOfIds" : "1001++1002++1003++1004++1005++1006++1007" }
चरण व्याख्या
- $reduce: सरणी पर पुनरावृत्त करता है, एक स्ट्रिंग संचय करता है: प्रत्येक पूर्णांक के लिए
+++ स्ट्रिंग(पूर्णांक) जोड़ता है। - $let: संचित स्ट्रिंग को
keyमें बांधता है। - $substrCP: अग्रणी "++" हटाता है (स्थिति 2 से शुरू, लंबाई शेष)।
सरल विकल्प (MongoDB 4.4+): $reduce के साथ $concat सीधे
MongoDB 4.4+ $reduce में स्ट्रिंग संचय का समर्थन करता है बिना $let/$substr ट्रिक के:
> db.demo377.aggregate([
{ $project: {
ListOfIds: {
$reduce: {
input: "$ListOfIds",
initialValue: "",
in: { $cond: [ { $eq: [ "$$value", "" ] }, { $toString: "$$this" }, { $concat: [ "$$value", "++", { $toString: "$$this" } ] } ] }
}
}
}}
]);
नोट
$concatस्ट्रिंग आर्गुमेंट्स की आवश्यकता है;$toStringपूर्णांकों को परिवर्तित करता है।- बहुत बड़ी सरणी के लिए, 16MB BSON दस्तावेज़ आकार सीमा पर विचार करें।