mongodb - 猫鼬查找和更新删除其他字段
问题描述
我有这样的架构:
this.schema = new Schema({
userEmail: String
environments: [
{
envId: String,
appPreference: String,
language: String,
timeZone: String,
summaryNotificationSchedule: {
timeOfTheDay: String
}
}
]
});
更新请求:
{
"envId": "u2",
"appPreference": "put2",
"timeZone": "gmt",
"summaryNotificationSchedule.timeOfTheDay": "32400",
}
如您所见,我没有发送 "language": "abc",
更新请求,结果我看到该language
字段已被删除。我想更新字段但不删除其他字段
Mongoose 查找和更新调用:
await this.model.findOneAndUpdate({ userEmail, 'environments.envId': envId }, { $set: { 'environments.$': setPreferenceFields } }, { new: true });
解决方案
您可以先从您的请求创建更新对象:
let request = {
"envId": "u2",
"appPreference": "put2",
"timeZone": "gmt",
"summaryNotificationSchedule.timeOfTheDay": "32400",
};
let update = Object.keys(request).reduce((acc, cur) => {
acc[`environments.$.${cur}`] = request[cur];
return acc;
}, {})
console.log(update);
然后将其传递给更新:
await this.model.findOneAndUpdate({ userEmail, 'environments.envId': envId }, { $set: update }, { new: true });
推荐阅读
- angular - 在Angular上的div类下拉菜单的按钮下拉菜单上获取背景颜色
- terraform - 将现有 BigQuery 数据集迁移到 Terraform
- postgresql - 当关系表删除或添加行时更新主表的 PostgreSQL 触发器。使用“为每个声明”
- python-3.x - 如何将两个url的标题存储在excel文件中
- html - 停止背景在 HTML 中循环
- c# - 如何处理下面代码中的特殊字符“_”
- sql - 将记录插入数据库并将其与另一个表中的记录关联,而不需要 id
- amazon-web-services - 使用 Terraform 的 EKS GPU 工作组
- javascript - 如何使用 puppeteer 下载网页并将图像转换为 base64,以便最终输出为单页文件?
- java - 带有 MutableLiveData 的 Android 布尔更改侦听器