इसे करने का एक तरीका यह होगा (आपके डेटा की संरचना और आपके इंडेक्सिंग सेटअप के आधार पर $match चरण की कोई आवश्यकता नहीं है, हालांकि, प्रदर्शन कारणों से आप इसे अभी भी रखना चाहेंगे):
db.item.aggregate([
{ "$project": {
"items": {
"$slice": [
{ "$filter": {
"input": "$items",
"as": "item",
"cond": { "$eq": [ "$$item.status", "active" ] }
}},
-3,2
]
}
}}
])
मुझे लगता है कि यह शायद बेहतर है, हालांकि, निम्न क्वेरी का उपयोग करना:
db.items.db.aggregate([
{
$project: {
"items": {
"$filter": {
"input": "$items",
"as": "item",
"cond": { "$eq": [ "$$item.status", "active" ] }
}
}
}
}, {
$project: {
"items": {
$slice: [
{
$slice: [
"$items",
{
$subtract: [ { $size: "$items" }, 1 ] // length of items array minus one
}
]
}, 2 // max two elements
]
}
}
}])
क्योंकि यह पहले अंतिम तत्व से छुटकारा दिलाएगा और फिर आउटपुट को दो वस्तुओं तक सीमित कर देगा जो कि 3 से कम "सक्रिय" तत्वों वाली स्थिति में शायद आप जितना चाहते हैं उससे अधिक है।