MongoDB 3.4.4 और इसके बाद के संस्करण से, आप $arrayToObject
ऑपरेटर जो एक सरणी को एक दस्तावेज़ में बदल देता है और सरणी उन दस्तावेज़ों की एक सूची होनी चाहिए जिनमें दो फ़ील्ड हों, k
और v
कहां:
तो आपको एक पाइपलाइन बनाने की आवश्यकता होगी जो पहले items
. को रूपांतरित करे से सरणी
"items":[
{
"id":"AB-02",
"qty":2
},
{
"id":"AB-03",
"qty":0
},
{
"id":"AB-03",
"qty":9
}
]
करने के लिए
"items" : [
{
"k" : "AB-02",
"v" : {
"id" : "AB-02",
"qty" : 2.0
}
},
{
"k" : "AB-03",
"v" : {
"id" : "AB-03",
"qty" : 0.0
}
},
{
"k" : "AB-03",
"v" : {
"id" : "AB-03",
"qty" : 9.0
}
}
]
$map
अभिव्यक्ति के साथ सही ढंग से करता है
"$map": {
"input": "$items",
"as": "item",
"in": {
"k": "$$item.id",
"v": "$$item"
}
}
तो आपकी अंतिम पाइपलाइन उपरोक्त सभी ऑपरेटरों को $addFields
के रूप में:
db.collection.aggregate([
{
"$addFields": {
"items": {
"$arrayToObject": {
"$map": {
"input": "$items",
"as": "item",
"in": {
"k": "$$item.id",
"v": "$$item"
}
}
}
}
}
}
])