#node.js #mongodb
#node.js #mongodb
Вопрос:
как мне запросить mongodb, чтобы быть таким .. спасибо
{
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
}
Результат:
{
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
}
Ответ №1:
Вы можете использовать $group
db.collection.aggregate([
{
$group: {
_id: "$date",
statusA: {
$sum: {
$cond: [
{ $eq: [ "$status","A"] },
1,
0
]
}
},
statusB: {
$sum: {
$cond: [
{ $eq: [ "$status", "B" ]},
1,
0
]
}
}
}
}
])
Рабочая игровая площадка Монго
Комментарии:
1. Ваш ответ хорош, но как мне получить его недостающие дни и нулевое значение.? спасибо
Ответ №2:
Вы можете использовать aggregate
API pipline:
group
элемент bydate
при подсчете statusA / B с использованием$sum
1 или 0 в зависимости от$eq
результата conditon- Затем
project
результат для переименования_id
date
(как вы ожидали в своем примере)
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
});
Комментарии:
1.Ваш ответ хорош, но как мне получить его недостающие дни и нулевое значение.? спасибо