【问题标题】:MongoDb - count posts before, during and after given periodMongoDb - 在给定期间之前,期间和之后计算帖子
【发布时间】:2023-03-23 22:55:01
【问题描述】:

我有一个集合“帖子”。每个帖子都有一个发布日期。我有两个日期(期间)- start_date 和 end_date。我想聚合这个集合(带有附加条件,如已发布 = true),并检索 3 个值: - before_count(该期间之前的帖子数) - 在计数期间(该期间的帖子数) - after_count(该时间段后的帖子数)

我该怎么做?我对 MongoDb 不是很熟悉 - 我知道如何用 3 个查询来完成,但我很确定它可以只用 1 个查询来完成。

【问题讨论】:

  • 首先显示您的 3 个查询。在不提供任何您查询的文档示例的情况下,您期望得到什么样的答案?

标签: mongodb aggregation-framework


【解决方案1】:

您可以通过使用聚合操作的单个查询来执行此操作,其中您的初始管道步骤包括一个 $match 步骤来过滤进入管道的文档和后续 @ 987654322@ 阶段将所有文档分组为一个整体(_id为空),然后使用 $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
                    ]
                }
            }
        }
    }
])

【讨论】:

  • 非常感谢@chridam,这正是我想要的!
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2017-10-17
  • 2012-04-06
相关资源
最近更新 更多