我正在使用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.id
和endpoint.displayName
的文档
此查询查找文档:
{
devices: { $elemMatch: { id: "FA661234A511" } }
}
我知道我应该使用update
方法,但是我不知道如何选择要更新的字段?
我必须找到device
的第一个"id": "FA661234A511"
,然后找到endpoint
的第一个"displayName": "sw1DisplName"
id
在devices
的范围内是唯一的,而displayName
在endpoints
的范围内是唯一的
我尝试过这个:
update({
devices: {
$elemMatch: {
id: "FA661234A511",
endpoints: { $elemMatch: { displayName: "sw1DisplName" } }
}
}
}, {
"devices.$.endpoints.$.displayName": "diplayRiko"
})
不起作用:(。
我得到异常:
MongoError:在路径“ devices。$。endpoints。$。displayName”中找到的位置(即“ $”)元素过多
答案 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