пн goose Обновление объекта без «отбрасывания» - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть эта модель:

const UserSchema = mongoose.Schema({
email:{
  type: String,
  unique: true, 
  required: true
},
password:{
  type: String,
  required: true
},
obj1: { 
  type: Object, 
  unique : true,
  dropDups : true
}
});

Тогда начальные данные в регистре:

   new User({
              email:email,
              password:password,
              obj1:
                {
                  address: '0x1232424...', 
                  amount: 1578, 
                  time: Date.now()  
                }
            })

И когда я пытаюсь обновить данные, я не могу изменить только данные внутри объект, но он изменяет все данные объекта .. Так что, если я хочу изменить только сумму, то obj1.address и obj1.time удаляются ..

     await User.update (
        { email: user[0].email }, 
        {
          obj1:{
             amount: 2245, 
           }
        } 
      )

Найден этот mon goose Обновить объект без «drop» , который говорит, что нужно добавить оператор $ set, но он все равно удаляет данные ..

Как я могу изменить только одни данные внутри объекта в mongoDB с помощью mon goose без удаления других данных в том же объекте ..!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Используемое вами обновление - это обновление стиля замены, при котором весь документ заменяется новым. Если вы хотите обновить только одно поле, используйте оператор $set:

.update({email: user[0].email},{$set:{"obj1.amount":2245}})
0 голосов
/ 06 февраля 2020

Вы можете использовать оператор распространения , чтобы обновить только нужное поле и оставить остальные поля такими, как они есть. Поэтому попробуйте следующий код:

await User.update ( { email: user[0].email }, { obj1:{...obj1, amount: 2245, } } );
...