我试图更新单键值Array对象 在MongoDB集合中。但它使用单个键值更新所有值。
MongoDB中的以前的Json数据
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 :(得分: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)