gpt4 book ai didi

node.js - MongoDB 仅更新对象中更改的字段,而不是替换整个对象

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:26 24 4
gpt4 key购买 nike

我想更新包含 MongoDB 中对象的文档。由于更新的对象是用户给出的,我不知道他到底要改变什么。

例如,我在用户集合中有此文档:

{
_id: 1,
date: new Date(),
info: {
first_name: "a",
last_name: "b",
phone: "c"
}
}

用户可以编辑名字和姓氏,但不能编辑电话号码。

这是req.body(我从用户那里收到的输入):

{
info: {
first_name: "aa"
}
}

现在,为了仅更新“info.first_name”并保留存储在信息对象中的其他字段,我必须设置如下更新查询:

db.users.update({}, {$set: {"info.first_name": req.body.info.first_name}}, cb);

但是输入可以是动态且可变的。我不知道是否总是更新的名字,它可以是姓氏,甚至是其他子对象,例如地址:“info.address.city”(例如)

因此,我像这样处理这些更新:

$set: req.body

就是这样。它有效,但我对此有疑问。它替换了整个信息对象,并且不保留存储在其中的其他 key - 电话将被删除,姓氏将被删除。

有没有办法告诉 MongoDB 不要替换整个对象,而只是更新那些提到的键?

最佳答案

读取数据库中的当前条目并将 req.body 覆盖当前条目不是更容易吗?

// read current entry in database
let currentObject = await user.findOne({_id});

// merge current entry with changed updated key:values
let newObject = ( currentObject, ...req.body );

// write update to database
let user.findOneAndUpdate({_id}, {$set: newObject}, )

关于node.js - MongoDB 仅更新对象中更改的字段,而不是替换整个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54087093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com