Mongodb Aggregate - $sum 如果在日期之间添加值
Posted
技术标签:
【中文标题】Mongodb Aggregate - $sum 如果在日期之间添加值【英文标题】:Mongo db Aggregate - $sum to add values if between dates 【发布时间】:2021-12-13 18:11:20 【问题描述】:我希望编写一个查询来根据日期汇总数量。
我的文档如下所示:
"_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
])
示例 here 我使用过 mongo $$NOW
,但如果您的日期有效,则使用您的代码更容易。
【讨论】:
工作就像一个魅力。我对此进行了试验,但有时从文档中有点难以理解。谢谢!以上是关于Mongodb Aggregate - $sum 如果在日期之间添加值的主要内容,如果未能解决你的问题,请参考以下文章