MongoDB按索引更新对象的嵌套数组

时间:2017-11-13 13:18:27

标签: mongodb mongoose

我们假设有下面的数据库......

{ _id: 1234,
  key: 'Contacts',
  value: [
     { name: 'McDonald', phone: '1111'}, 
     { name: 'KFC', phone: '2222'}
  ]
}

我想将肯德基的电话号码更改为! 3333'。

我做的是

DB.findOne({ key: 'Contacts' }, function(err, db){

        db.value[1]['phone'] = '3333'
        db.save(function(err, result){ 
            // done 
        })
    }
)

但它没有更新数据库。我错了什么?

  1. 由于某种原因,数组元素中没有特定的_id。
  2. 只有查找特定元素的方式是index

1 个答案:

答案 0 :(得分:1)

使用位置运算符$

更多信息:https://docs.mongodb.com/manual/reference/operator/update/positional/#up.S

DB.update({key: "Contacts", "value.name": "KFC" },
         { $set: { "value.$.phone" : 666 } },function(err,doc){

         });