在mongodb

时间:2019-01-14 17:37:30

标签: node.js mongodb

我正在使用nodejs npm mongodb

mongodb版本:mongodb@3.1.9 nodejs版本:v10.11.0

这是文档布局:

{
    "_id": {
        "$oid": "5c1bc140a3902a10542df7a6"
    },
    "email": "radoslav.k.marrinov@gmail.com",
    "username": "rikotech",
    "deviceId": "FA661234A511",
    "password": "12345",
    "devices": [
        {
            "_id": {
                "$oid": "5c1bb980fb6fc00eee83b4d9"
            },
            "id": "FA661234A511",
            "class": "11",
            "name": "someName",
            "displayName": "disName",
            "endpoints": [
                {
                    "class": "binarySwitch",
                    "name": "bs1",
                    "displayName": "sw1DisplName"
                },
                {
                    "class": "binarySwitch",
                    "name": "bs2",
                    "displayName": "sw2DisplName"
                }
            ]
        }
    ]
}

我想更改devices[0].endpoints[0].displayName: "newName"的值

我能够找到具有device.idendpoint.displayName的文档

此查询查找文档: { devices: { $elemMatch: { id: "FA661234A511" } } }

我知道我应该使用update方法,但是我不知道如何选择要更新的字段?

我必须找到device的第一个"id": "FA661234A511",然后找到endpoint的第一个"displayName": "sw1DisplName"

iddevices的范围内是唯一的,而displayNameendpoints的范围内是唯一的

我尝试过这个:

update({
    devices: {
      $elemMatch: {
        id: "FA661234A511",
        endpoints: { $elemMatch: { displayName: "sw1DisplName" } }
      }
    }
  }, {
    "devices.$.endpoints.$.displayName": "diplayRiko"
  })

不起作用:(。

我得到异常:

  

MongoError:在路径“ devices。$。endpoints。$。displayName”中找到的位置(即“ $”)元素过多

1 个答案:

答案 0 :(得分:1)

您是否尝试过$ set运算符?

  

$ set运算符用指定的值替换字段的值。

{ $set: { <field1>: <value1>, ... } }

我想这会起作用:

db.yourcollection.update({ devices[0].id: "FA661234A511" }, { $set: "endpoints.0.displayName": "newName" })

Mongodb文档: https://material-ui.com/getting-started/supported-platforms