![](/img/trans.png)
[英]Please how can i update a nested mongodb embedded document, I have a document structure like this
[英]I would like to update MongoDb document
我的问题是更新文档的特定字段。 想象一下,当我只是更改文档的一个字段时,我们有多个输入字段,其余的字段将为空,因为我只是更新了其中一个。 有没有一种简单的方法可以更新一个字段,而其余字段保持不变。
我可以提供开关盒或if-else,但我认为这不是解决此类问题的合适方法。
updateChr:async ( args: any) => {
try {
const data = await Client.findByIdAndUpdate(args.clientId,
{$set:
{
chronology:{
status: args.clientInput.status,
note:args.clientInput.note,
date: args.clientInput.date,
file:{
filename:args.clientInput.file.filename,
data:args.clientInput.file.data,
type:args.clientInput.file.type,
size:args.clientInput.file.size,
}
}
},
}
,{useFindAndModify: false})
return transformClient(data);
} catch (err) {
throw err;
}
},
因此,这部分是您需要注意的地方:
{$set:
{
chronology:{
status: args.clientInput.status,
note:args.clientInput.note,
date: args.clientInput.date,
file:{
filename:args.clientInput.file.filename,
data:args.clientInput.file.data,
type:args.clientInput.file.type,
size:args.clientInput.file.size,
}
}
},
}
您要告诉mongo的是,无论现在这些字段中的内容是什么(即使它们当前不存在),也要为您提供的内容设置新的值。 如果提供的是空值,则它将其新值设置为null。 如果您不希望在事物的新值为null时更新它们,则需要先清理数据,然后再将其推入mongo。 最简单的方法是先清理数据,然后再将其添加到上面引用的对象中。 一旦只获得了实际存在的数据,则只需遍历数据即可为mongo创建更新对象,而不是像在此处那样静态地设置它。
或者,如果在此阶段可以使用那些字段中实际应该存在的数据,则可以遍历空值,并用mongo中的当前值或应使用的任何值来填充它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.