如何在MongoDB中的嵌套对象中更新文档数据?

时间:2019-11-21 11:23:02

标签: node.js mongodb mongoose graphql

这是默认模式模型:-

const UserSettings = new Schema({
      ID: {  type: Number,  required: true, exists: false, unique : true },
      UserID : Number,
      Account : {
          Name : String,
          Email : {  type: String,  required: "email id is required", exists: false, unique : true },
          UserName : String,
          isFacebook :  {type : Boolean, default : false}
      },
      Notification : {
                  Trending : {
                      isEmail : {type : Boolean, default : true},
                      isPush :  {type : Boolean, default : true},
                      Button : {
                        isDaily :  {type : Boolean, default : false},
                        isWeekly :  {type : Boolean, default : false},
                        isOff : {type : Boolean, default : false}
                      }
                  },
                  Recommanded : {
                      isEmail : {type : Boolean, default : true},
                      isPush :  {type : Boolean, default : true},
                      Button : {
                        isDaily :  {type : Boolean, default : false},
                        isWeekly :  {type : Boolean, default : false},
                        isOff : {type : Boolean, default : false}
                      }
                  }
       }
});

当我保存值时,它将在架构中输入默认字段值,

    "Account" : {
    "Email" : "ted@gmail.com",
    "isFacebook" : true,
    "Name" : "ted"
},
"Notification" : {
    "Trending" : {
        "Button" : {
            "isDaily" : false,
            "isWeekly" : false,
            "isOff" : false
        },
        "isEmail" : true,
        "isPush" : true
    },
    "Recommanded" : {
        "Button" : {
            "isDaily" : false,
            "isWeekly" : false,
            "isOff" : false
        },
        "isEmail" : true,
        "isPush" : true
    }
}

在更新情况下,我必须传递选定的参数,例如只需要更新

Account{
Email : "ted1@gmail.com"
},
Notification {
  Trending {
      isPush : false,
  }    
}

那我将如何使用mongo更新查询?

我已经尝试过这种解决方案来更新价值,但是它将删除现有价值:-

  return UserSettings.updateOne(
       {$and: [{  UserID: args.UserID },{ Status : 1 }]},
        { $push : { "Account":  args.Account  }},
       {
         upsert: true,
         returnNewDocument: true
       },
    );

还有一个:-

return UserSettings.updateOne(
       {$and: [{  UserID: args.UserID },{ Status : 1 }]},
       args,
       {
         upsert: true,
         returnNewDocument: true
       },
    );

1 个答案:

答案 0 :(得分:0)

尝试一下:

this.ShowIcon = false;