如何根据在文档中添加2个属性的值来搜索文档?

时间:2016-01-06 16:03:20

标签: mongodb aggregation-framework

我有一份文件:

{"price1": 500, "price2": 500}

我想找到所有文件“(price1 + price 2)< 1200”。我假设我可以通过使用聚合框架来做到这一点,但没有看到正确的方法。

2 个答案:

答案 0 :(得分:3)

您可以使用$add执行此操作。请尝试以下代码:

db.collection.aggregate([
    { $project: { total: { $add: [ "$price1", "$price2" ] } } }, 
    { $match: {total: {$lt: 1200  }} }
])

答案 1 :(得分:0)

另一种方法是使用$redact运算符返回所有文件,其中" price1"和" price2"大于1200。当然,要获得总和,您需要使用$add运算符。$cond运算符使用$$KEEP变量评估并返回表达式为true的文档并排除使用$$PRUNE变量将该条件评估为false的所有文档。

db.collection.aggregate([ 
    { "$redact": { 
        "$cond": [ 
            { "$lt": [ 
                { "$add": [ "$price1", "$price2"] },
                1200
            ]},
            "$$KEEP",
            "$$PRUNE"
        ]
    }}
])