MongoDb-统计给定期间之前、期间和之后的帖子
我收集了一些“帖子”。每篇文章都有发表日期。我有两个日期(期间)-开始日期和结束日期。我希望聚合此集合(使用附加条件,如published=true),并检索3个值: -盘点前(该期间之前的职位数量) -盘点期间(该期间的职位数量) -盘点后(该期间后的职位数量)MongoDb-统计给定期间之前、期间和之后的帖子,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我收集了一些“帖子”。每篇文章都有发表日期。我有两个日期(期间)-开始日期和结束日期。我希望聚合此集合(使用附加条件,如published=true),并检索3个值: -盘点前(该期间之前的职位数量) -盘点期间(该期间的职位数量) -盘点后(该期间后的职位数量) 我该怎么做?我不太熟悉MongoDb-我知道如何使用3个查询,但我很确定,只需一个查询就可以完成。您可以通过使用聚合操作的单个查询来完成此操作,其中初始管道步骤包括过滤进入管道的文档的步骤和后续的阶段,以将所有文档作为一个整体进行分组
我该怎么做?我不太熟悉MongoDb-我知道如何使用3个查询,但我很确定,只需一个查询就可以完成。您可以通过使用聚合操作的单个查询来完成此操作,其中初始管道步骤包括过滤进入管道的文档的步骤和后续的阶段,以将所有文档作为一个整体进行分组(使用
\u id
null),然后使用运算符创建逻辑,以获取不同时段的计数,从而为累加器提供数据
以下面的例子为例:
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
]
}
}
}
}
])
您可以通过使用聚合操作的单个查询来实现这一点,其中初始管道步骤包括过滤进入管道的文档的步骤和后续的阶段,以将所有文档作为一个整体进行分组(id为
\u
null)然后使用运算符创建逻辑,以获取不同时段的计数,从而为累加器提供数据
以下面的例子为例:
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
]
}
}
}
}
])
首先显示你的3个查询。如果不提供你正在查询的文档的任何示例,你希望得到什么样的答案?首先显示你的3个查询。如果不提供你正在查询的文档的任何示例,你希望得到什么样的答案?非常感谢@chridam,这正是我想要的!非常感谢@chridam,这正是我要找的!