2016-11-10 90 views
0

我试图更新MongoDB集合内的单个键值数组对象 。但它会用单一键值更新所有值。阵列对象内的单个键值更新

上一页JSON数据内的MongoDB

result: [ 
    {   
     "firstname": A, 
     "lastname": B, 
     "age": 5  
    } 
] 
    "_id" : "582187d461cc8230bf0aba03" 

我只想更新一个键值 姓什么我做我更新单个密钥值 :A至d和我需要的所有剩余价值必须相同(坚持)。 但被更改并且只更新了单个键值对。

{ 
    result: [ 
    {   
    "first name": A 
    } 
    ] 
    "_id" : "582187d461cc8230bf0aba03" 
    } 

姓氏和年龄都不见了。我正在使用节点js来更新集合。

使用该脚本

var query = {"_id" : "582187d461cc8230bf0aba03"}; 
    var arr = []; 
    userObj = { 
    firstname : B 
    }; 
    arr.push(userObj); 
    update = { 
    result : arr 
    }; 

    var = options = {new : true, upsert : true}; 

    user.findOneAndUpdate(query, update, options, function(err, result) { 
    if(err); 
    console.log(err); 
    res.send(result); 
    } 

有任何命令,所以我只能更新单个密钥值和所有值将收集

回答

0

是坚持,所以在默认情况下,当你做一个更新,它会将文档A替换为文档B.

您想使用$set运算符仅更新特定字段,而不是替换整个文档。

因此,举例来说,如果你有:

{ 
    _id: 123, 
    first_name: "John", 
    last_name: "Smith", 
    phone_number: "(123)456-7890" 
} 

和你做

db.user.update({_id: 123}, {first_name: "Bob"}) 

您将替换整个文档并获得:

{ 
    _id: 123, 
    first_name: "Bob" 
} 

,但如果你这样做:

db.user.update({ _id: 123 }, { $set: { first_name: "Bob" } }) 

你会得到你期望的结果:

{ 
    _id: 123, 
    first_name: "Bob", 
    last_name: "Smith", 
    phone_number: "(123)456-7890" 
} 

在你的情况,你可以试试这个:

var obj = { 
    firstname: B 
}; 

user.findOneAndUpdate(query, {$set: obj}, options, function(err, result)