MongoDB聚合变量创建多个字段?

时间:2014-07-30 21:28:11

标签: mongodb mongodb-php

鉴于以下查询,使用$$ priceToInflationRatio帮助创建多个计算字段的最佳方法是什么?从我在$ let上看到的,它似乎只适用于创建单个字段 - 我想在整个$ project部分中使用变量。这可能吗?

db.books.aggregate([
  {$project: {
        'priceInflationresult': {
            $let: {
                vars: {
                    'priceToInflationRatio': {
                        $multiply: [{'$divide': [{'$subtract': ['$price', 1]}, 5]}, 10]
          }
        },
        in: {
            '$cond': [
            {'$gt': ['$price', 5]},
            {'$mod': ['$$priceToInflationRatio', 1]},
            1
          ]
        },
      }
    }
  }}
])

1 个答案:

答案 0 :(得分:2)

in表达式的$let部分是一个对象,因此它可以接受多个键,每个键都可以是一个用范围内的变量计算的表达式:

> db.test.insert({ "_id" : 0, "a" : 1, "b" : 1 })
> db.test.aggregate([{
    "$project" : {
        "test" : {
            "$let" : {
                "vars" : {
                    "c" : 2,
                    "d" : 3
                },
                "in": {
                    "a" : { "$add" : ["$a", "$$c"] },
                    "b" : { "$add" : ["$b", "$$d"] }
                }
            }
        }
    }
}]);
{ "_id" : 0, "test" : { "a" : 3, "b" : 4 } }

请注意,这必然会创建子文档,因为不允许使用顶级$ let表达式。您可以使用另一个$ project阶段进行更改。