如何在Mongo聚合中基于项目的条件?

时间:2018-01-30 20:56:27

标签: mongodb

我需要在管道中执行具有第一个$match阶段的聚合查询:

match_stage = {
    '$match': {
        'path': {'$in': locations},
        'date': {
            '$or': {
                [
                    {'$gte': range_a_start, '$lte': range_a_end},
                    {'$gte': range_b_start, '$lte': range_b_end},
                ]
            }
        }
    }
}

基本上我需要将文档匹配到两个日期范围,并根据ISODate字段执行一些基于日期的聚合,但是之后需要执行$project我应该确定文档是否来自匹配range_arange_b

我不确定如何实现这一目标。我见过那里的$bucket运营商,但到目前为止我运气不好。

1 个答案:

答案 0 :(得分:1)

继Veeram建议使用项目阶段之后:

// Project some fields to tell us which range.
isInFirstRange: { $cond: { if: {$and:[{'$gte': ["$date", range_a_start]},{'$lte': ["$date", range_a_end]}]}, then: true, else: false } }

isInSecondRange: { $cond: { if: {$and:[{'$gte': ["$date", range_b_start]},{'$lte': ["$date", range_b_end]}]}, then: true, else: false } }

这些方面的东西......

编辑:投影是您要创建“虚拟”字段的位置,其中包含基于实际字段和/或公式等的值。例如,如果您有一个半径为3的圆,则只能保存半径到DB并将其区域“投影”为pi * 9.区域不保存在DB中。预计在预测阶段。阅读更多here