MongoDB-减去

时间:2019-12-05 20:41:48

标签: mongodb mongodb-query aggregation-framework

基本上我想减去每个对象的完成起点。
因此,在下面的示例中,输出应为2和4((7-5 = 2)和(8-4 = 4)),然后我要将这两个字段都添加到现有文档中。

如何在MongoDB中做到这一点?

{   
    "title" : "The Hobbit",
    "rating_average" : "???",
    "ratings" : [
        {
            "title" : "best book ever",
            "start" : 5,
            "finish" : 7
        },
        {
            "title" : "good book",
            "start" : 4,
            "finish" : 8
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

不确定查询输出的确切要求是什么,但这可能会有所帮助。

查询:

db.books.aggregate([
    { $unwind: "$ratings" },
    { $addFields: { "ratings.diff": { $subtract: [ "$ratings.finish", "$ratings.start" ] } } }
])

管道说明:

  1. 展开数组,因为$ subtract不能作用于数组数据。
  2. 在“ ratings”子文档中添加一个名为diff的新字段,该字段具有 计算值

编辑:

OP要求将结果存储在同一子文档中。与朋友和家人讨论后,我发现这是可行的,但仅适用于MongoDB 4.2或更高版本。这是一条可以实现所需结果的更新语句。这是一个更新,而不是聚合。

更新 :(特定于MongoDB 4.2或更高版本)

db.books.update({
},
[
  {
    $replaceWith: {
      ratings: {
        $map: {
          input: "$ratings",
          in: {
            start: "$$this.start",
            finish: "$$this.finish",
            diff: {
              $subtract: [
                "$$this.finish",
                "$$this.start"
              ]
            }
          }
        }
      }
    }
  }
])