我有这些数据:
{
"_id" : ObjectId("5956795e1729955bbed30e68"),
"messages" : [
{
"text" : "Test 1"
},
{
"text" : "Test 2",
"link" : {
"type" : "Calendar"
}
}
]
}
我运行此查询:
db.collection('user').update(
{
'_id': ObjectID.createFromHexString('5956795e1729955bbed30e68'),
'messages.isLocked': { $exists: false }
},
{
$set: { 'messages.$.isLocked': true }
}
);
我希望所有的消息都包含" isLocked:true"但我收到了:
MongoError:位置运算符未找到所需的匹配项 查询。未更新的更新:消息。$ .isLocked
其他输入:如果我运行查询'messages.text': { $exists: true }
而不是'messages.isLocked': { $exists: false }
,则Mongo仅更新第一个元素-.-
我对这个功能做错了什么?
更新:我使用MongoDB 3.4.5,所以我认为可以实现:
它仅适用于第一次出现: https://docs.mongodb.com/manual/reference/operator/update/positional/