MongoDB位置运算符

时间:2017-07-11 10:57:09

标签: mongodb

我有这些数据:

{
    "_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/

0 个答案:

没有答案