Увеличьте значение вложенного поля в mongodb, если оно существует, или создайте вложенные поля - PullRequest
0 голосов
/ 21 октября 2019

Мне нужно увеличить значение многоуровневого вложенного поля, если оно существует, или создать полное вложенное поле. Структура объекта.

Структура моего документа

Doc1 {
_id:ObjectId(),
myField: {
  nested:{
      x: 5,
      y: 10,
      z: 20
  }
 }
}

Объяснение цели : мне нужен способ написать один запрос:

  • Если myField существует : Увеличить значение моего вложенного поля myField.nested.x на 10.
  • Если myField не существует : Создайте поле ниже с начальными значениями, такими как указано в Doc1 .

Попытка и объяснение :

 db.collection('collectionName').findOneAndUpdate(
    {_id:"userId","myField" : { $exists : true }},
    {$inc:{'myField.nested.x':10}
 })

Таким образом, я могу увеличить вложенное поле, если оно существует, но в случае отсутствия я не могу установить myField так же, какdoc1.

Хотя я могу использовать другой запрос после ответа в моем обратном вызове NodeJ для достижения требуемого поведения. Но мне нужно элегантное решение в одном запросе.

Я использую MongoDB версии 4.0.4, спасибо заранее.

1 Ответ

1 голос
/ 21 октября 2019

Попробуйте этот запрос

Если поле не существует, $ inc создает поле и задает для поля указанное значение.

db.collection('collectionName').findOneAndUpdate({_id:"userId"},
{$inc:{'myField.nested.x':10}
})
...