Reputation: 1
how do i query mongodb to be so .. thank
{
status: A
date: 1/1
},
{
status: A
date: 1/1
}
{
status: B
date: 1/1
}
{
status: B
date: 2/1
}
{
status: B
date: 5/1
}
Result:
{
date: 1/1,
statusA: 2,
statusB: 1
}
{
date: 2/1,
statusA: 0,
statusB: 1
}
{
date: 3/1,
statusA: 0,
statusB: 0
} {
date: 4/1,
statusA: 0,
statusB: 0
}
{
date: 5/1,
statusA: 0,
statusB: 1
}
Upvotes: 0
Views: 45
Reputation: 97
You can use aggregate
pipline API:
group
element by date
while counting statusA/B using $sum
1 or 0 depending on $eq
conditon resultproject
the result to rename _id
by date
(as you expected in your exemple)db.collection.aggregate()
.group({
_id: "$date",
statusA: { $sum:
{ $cond: [{ $eq: [ "$status", "A" ]}, 1, 0 ]}
},
statusB: { $sum:
{ $cond: [{ $eq: [ "$status", "B" ]}, 1, 0 ]}
}
})
.project({
date: "$_id",
statusA: 1,
statusB: 1,
_id: 0
});
Upvotes: 0
Reputation: 8894
You can use $group
db.collection.aggregate([
{
$group: {
_id: "$date",
statusA: {
$sum: {
$cond: [
{ $eq: [ "$status","A"] },
1,
0
]
}
},
statusB: {
$sum: {
$cond: [
{ $eq: [ "$status", "B" ]},
1,
0
]
}
}
}
}
])
Working Mongo playground
Upvotes: 1