#javascript #node.js #mongodb #mongoose #mongodb-query
Вопрос:
Я хочу написать запрос для агрегирования количества на основе дат.
У меня есть документы, которые выглядят следующим образом:
{
"_id" : 1234,
"itemNumber" : "item 1",
"date" : ISODate("2021-10-26T21:00:00Z"),
"quantity" : 1,
"__v" : 0
}
И запрос, подобный этому:
//monogoose
myCollection.aggregate().group({
_id: '$itemNumber',
ninetyDays: {
$sum: {
$and: {
$gte: ["date", dayjs().subtract(90, 'd').toDate()],
$lt: ["date", dayjs().toDate()]
}
}
}
})
В приведенном выше запросе ninetyDays
всегда 0.
Я в основном ищу, чтобы получить сумму количества, заданного в диапазоне дат.
Помощь очень ценится.
Спасибо
Ответ №1:
Вы можете использовать $cond
для суммирования 1 или 0, если ваше условие соответствует.
Предполагая, что ваше выражение даты правильное, это должно сработать, но не подделывайте $
date
.
db.collection.aggregate([
{
"$group": {
"_id": "$itemNumber",
"ninetyDays": {
"$sum": {
"$cond": {
"if": {
"$and": [
$gte: ["$date", dayjs().subtract(90, 'd').toDate()],
$lt: ["$date", dayjs().toDate()]
]
},
"then": 1,
"else": 0
}
}
}
}
}
])
Пример здесь, где я использовал mongo $$NOW
, но если ваша дата работает, проще использовать ваш код.
Комментарии:
1. Сработало как шарм. Я экспериментировал с этим, но иногда это немного сложно из документов. Спасибо!