猫鼬查找和更新删除其他字段

基图

我有这样的架构:

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字段已删除。我想更新字段,但不删除其他字段

猫鼬查找和更新呼叫:

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 });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章