Reputation: 674
Let's say I have these collections
{
_id: 1,
status: 'pending'
},
{ ... to id 10 for example (status is pending)},
{
_id: 12,
status: 'released'
},
{ ... to id 22 for example (status is released)},
How do i query only 5 documents per status ('pending' and 'released')
while using the aggregation pipeline?
Upvotes: 0
Views: 52
Reputation: 1274
Suppose input is:
[
{
"_id": 1,
"status": "pending"
},
{
"_id": 2,
"status": "pending"
},
{
"_id": 3,
"status": "pending"
},
{
"_id": 4,
"status": "pending"
},
{
"_id": 5,
"status": "pending"
},
{
_id: 6,
status: "pending"
},
{
_id: 7,
status: "pending"
},
{
_id: 8,
status: "pending"
},
{
_id: 9,
status: "released"
},
{
_id: 10,
status: "released"
},
{
_id: 11,
status: "released"
},
{
_id: 12,
status: "released"
},
{
_id: 13,
status: "released"
},
{
_id: 14,
status: "released"
},
{
_id: 15,
status: "released"
},
{
_id: 16,
status: "released"
},
]
You can use aggregate pipeline $facet to get 2 arrays of data
collectionname.aggregate([
{
$facet: {
pending: [
{
$match: {
status: "pending"
}
},
{
$skip: 0
},
{
$limit: 5
}
],
released: [
{
$match: {
status: "released"
}
},
{
$skip: 0
},
{
$limit: 5
}
]
}
}
])
giving output:
[
{
"pending": [
{
"_id": 1,
"status": "pending"
},
{
"_id": 2,
"status": "pending"
},
{
"_id": 3,
"status": "pending"
},
{
"_id": 4,
"status": "pending"
},
{
"_id": 5,
"status": "pending"
}
],
"released": [
{
"_id": 9,
"status": "released"
},
{
"_id": 10,
"status": "released"
},
{
"_id": 11,
"status": "released"
},
{
"_id": 12,
"status": "released"
},
{
"_id": 13,
"status": "released"
}
]
}
]
Upvotes: 1