MongoDb-统计给定期间之前、期间和之后的帖子

MongoDb-统计给定期间之前、期间和之后的帖子,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我收集了一些“帖子”。每篇文章都有发表日期。我有两个日期(期间)-开始日期和结束日期。我希望聚合此集合(使用附加条件,如published=true),并检索3个值: -盘点前(该期间之前的职位数量) -盘点期间(该期间的职位数量) -盘点后(该期间后的职位数量) 我该怎么做?我不太熟悉MongoDb-我知道如何使用3个查询,但我很确定,只需一个查询就可以完成。您可以通过使用聚合操作的单个查询来完成此操作,其中初始管道步骤包括过滤进入管道的文档的步骤和后续的阶段,以将所有文档作为一个整体进行分组

我收集了一些“帖子”。每篇文章都有发表日期。我有两个日期(期间)-开始日期和结束日期。我希望聚合此集合(使用附加条件,如published=true),并检索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,这正是我要找的!