我有一个集合“帖子”。每个帖子都有一个出版日期。我有两个日期(句点) - start_date和end_date。我想聚合此集合(具有附加条件,如published = true),并检索3个值: - before_count(该期间之前的帖子数) - 计数期间(该期间的职位数) - after_count(该时期后的帖子数量)
我该怎么做?我对MongoDb不是很熟悉 - 我知道如何用3个查询来完成它,但我很确定它只能用1个查询来完成。
答案 0 :(得分:0)
您可以使用单个查询来执行此操作,该查询使用聚合操作,其中您的初始管道步骤包含 $match
步骤,以过滤进入管道的文档和随后的 $group
将所有文档整体分组(_id
null),然后使用 $cond
运算符创建逻辑获取不同时期的计数以提供 $sum
累加器。
以下面的例子为例:
db.posts.aggregate([
{ "$match": { "publication_date": { "$exists": true }, "published": true } },
{
"$group": {
"_id": null,
"before_count": {
"$sum": {
"$cond": [
{ "$lt": ["$publication_date", start_date] },
1,
0
]
}
},
"during_count": {
"$sum": {
"$cond": [
{
"$and": [
{ "$gte": ["$publication_date", start_date] },
{ "$lte": ["$publication_date", end_date] },
]
},
1,
0
]
}
},
"after_count": {
"$sum": {
"$cond": [
{ "$gt": ["$publication_date", end_date] },
1,
0
]
}
}
}
}
])