gpt4 book ai didi

node.js - Mongoose findByIdAndUpdate 销毁丢失的字段

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:42 24 4
gpt4 key购买 nike

开发 Node.js API。我有显示 field 的 mongo 数据。它包含一个地址,例如......

    "address": {
"street": "123 main st",
"city": "seomwhere",
"state": "FL",
"zip": "33222"
},
:

当我发布到更新端点并像这样发送正文时,它确实会更新地址,但会删除那里的所有其他字段....

"address": { 
"zip": "33222"
}

因此,在数据库中,街道、城市、州都丢失了。这是我的一段代码...

venue = await Venue.findByIdAndUpdate(req.params.id, req.body, {
new: true,
runValidators: true
});

有什么想法吗?

最佳答案

由于地址正文中仅包含单个键 ("address": { "zip": "33222"}),因此它会将地址对象中的其他值替换为数据库中的空白值.

因此,要解决这个问题,您必须将 . 表示法与 address 对象一起使用。喜欢

venue = await Venue.findByIdAndUpdate(
req.params.id,
{ $set: { "address.zip": "33222" },
{ new: true, runValidators: true }
)

但是,由于您无法确定 address 对象中的哪些键将被更新以及根级别的哪些键

const object = req.body

for (var key in req.body.address) {
object[`address.${key}`] = object.address[key]
}
delete object.address

venue = await Venue.findByIdAndUpdate(
req.params.id,
{ $set: object },
{ new: true, runValidators: true }
)

关于node.js - Mongoose findByIdAndUpdate 销毁丢失的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59484778/

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