我有以下数据库:
> db.test.find().pretty()
{
"_id" : ObjectId("56b4c13d7db9acd913ce6e08"),
"state" : "helloworld",
"items" : [
{
"guid" : 123,
"uniqueId" : 0
},
{
"guid" : 124,
"uniqueId" : 1
}
]
}
我希望将guid
字段的items.uniqueId = 1
设置为125,以便结果为:
{
"_id" : ObjectId("56b4c13d7db9acd913ce6e08"),
"state" : "helloworld",
"items" : [
{
"guid" : 123,
"uniqueId" : 0
},
{
"guid" : 125,
"uniqueId" : 1
}
]
}
我试过了:
> db.test.update( {'items.uniqueId' : 1} , { $set : { 'items.guid' : 125 }} )
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16837,
"errmsg" : "cannot use the part (items of items.guid) to traverse the element ({items: [ { guid: 123.0, uniqueId: 0.0 }, { guid: 124.0, uniqueId: 1.0 } ]})"
}
})
我做错了什么?
答案 0 :(得分:1)
将$set
运算符与更新中的 $
positional operator 一起应用以更改guid
字段。 $
positional operator 将标识要更新的数组中的正确元素,而不显式指定元素在数组中的位置,因此最终的更新语句应如下所示:
db.collection.update({ "items.uniqueId": 1 },
{
"$set": {
"items.$.guid": 125
}
}
)
如果您想将该值增加1,请使用 $inc
更新运算符
db.collection.update({ "items.uniqueId": 1 },
{
"$inc": {
"items.$.guid": 1
}
}
)