ऐसा करने के लिए आपको एकत्रीकरण ढांचे की आवश्यकता है, मुझे लगता है कि आपको वास्तव में संरचना बदलनी चाहिए, लेकिन आपके पास जो है उसके साथ काम करना:
Model.aggregate(
[
{ "$match": { "prices.100": { "$exists": true } }},
{ "$unwind": "$prices.100" },
{ "$group": {
"_id": "$_id",
"price": { "$last": "$prices.100" }
}},
{ "$project": { "_id": 0, "prices.100": "$price" } }
]
)
भविष्य की रिलीज़ में आप केवल नए $slice
. का उपयोग करने में सक्षम होंगे ऑपरेटर:
Model.aggregate(
[
{ "$match": { "prices.100": { "$exists": true } } },
{ "$project": {
"_id": 0,
"prices.100": { "$slice": ["$prices.100",-1] }
}}
]
)
वास्तव में आप एक ही समय में "दोनों" फ़ील्ड कर सकते हैं:
Model.aggregate(
[
{ "$match": { "prices.100": { "$exists": true } } },
{ "$project": {
"_id": 0,
"prices.100": { "$slice": ["$prices.100",-1] },
"prices.101": { "$slice": ["$prices.100",-1] }
}}
]
)
और यह $unwind
और $last
सरणी का अंतिम तत्व प्राप्त करने के लिए जब $group
डेटा वापस पाने के लिए लागू किया जाता है।
यह मूल रूप से नए रूप में नियमित क्वेरी के समान प्रदर्शन करता है। वर्तमान स्वरूप में, यह धीमा होने वाला है।