MongoDb - 计算给定期间之前,期间和之后的帖子

时间:2017-04-06 08:37:31

标签: mongodb aggregation-framework

我有一个集合“帖子”。每个帖子都有一个出版日期。我有两个日期(句点) - start_date和end_date。我想聚合此集合(具有附加条件,如published = true),并检索3个值: - before_count(该期间之前的帖子数) - 计数期间(该期间的职位数) - after_count(该时期后的帖子数量)

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

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
                    ]
                }
            }
        }
    }
])