如何通过合并MongoDB中的另一个文档来更新激励文档

如何通过合并MongoDB中的另一个文档来更新激励文档,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我想用另一个具有相同架构且属于相同实体的文档更新一个文档。 可以在传感器阵列中添加新的传感器对象,或者只是在下次测量时会有新的值记录 激励文档 "deviceName": "test", "isActive": true, "sensors": [{ "id": "sgfgssfgs", "values": { "1": 232, "2": 3434, "3": 5454 } }, {

我想用另一个具有相同架构且属于相同实体的文档更新一个文档。 可以在传感器阵列中添加新的传感器对象,或者只是在下次测量时会有新的值记录

激励文档

  "deviceName": "test",
  "isActive": true,
  "sensors": [{
      "id": "sgfgssfgs",
      "values": {
        "1": 232,
        "2": 3434,
        "3": 5454
      }
    },
    {
      "id": "fgffgf",
      "values": {
        "1": 232,
        "2": 3434,
        "3": 5454
      }
    }
  ]
}
我要用于合并的新文档

{
  "deviceName": "test",
  "isActive": true,
  "sensors": [{
      "id": "sgfgssfgs",
      "values": {
        "4": 5454
      }
    },
    {
      "id": "fgffgf",
      "values": {
        "4": 5454
      }
    }
  ]
}
这就是我想看到的结果

{
  "deviceName": "test",
  "isActive": true,
  "sensors": [{
      "id": "sgfgssfgs",
      "values": {
        "1": 232,
        "2": 3434,
        "3": 5454,
        "4": 5454
      }
    },
    {
      "id": "fgffgf",
      "values": {
        "1": 232,
        "2": 3434,
        "3": 5454,
        "4": 5454
      }
    }
  ]
}

mongodb版本:3.6+

db.collection.aggregate([
  {
    $unwind: "$sensors"
  },
  {
    $group: {
      _id: {
        deviceName: "$deviceName",
        sensor: "$sensors.id",

      },
      isActive: {
        $first: "$isActive"
      },
      values: {
        $mergeObjects: "$sensors.values"
      }
    }
  },
  {
    $group: {
      _id: "$_id.deviceName",
      isActive: {
        $first: "$isActive"
      },
      sensors: {
        $push: {
          id: "$_id.sensor",
          values: "$values",

        }
      }
    }
  },
  {
    $project: {
      deviceName: "$_id",
      isActive: 1,
      sensors: 1,
      _id: 0,

    }
  }
])     
您可以在此处进行测试: