Добавить новый документ в массив, если нет такого же значения поля ни в одном другом встроенном документе массива - PullRequest
1 голос
/ 20 июня 2020

У меня есть документ

{
   _id:1,
   persons:[
     {name:"Jack", age:10},
     {name:"Ma",age:20}

   ]

}

Я хочу поместить sh новый документ {name:"Ho",age;22} в массив persons. Но есть условие - новый документ будет добавлен в массив, если имя name:"Ho" не существует в других документах встроенного массива. Если существует, {name:"Ho",age;22} не будет добавлен в массив persons. Какой способ?

Ответы [ 2 ]

1 голос
/ 20 июня 2020

У меня работает

db.collection('test').update({
  _id: 1,
  "persons.name" : {$ne:"Ho"}
}, { $push: {persons: { name: "Ho", age: 30 } }  })
1 голос
/ 20 июня 2020

Вы можете использовать оператор $not вместе с $elemMatch, чтобы запросить документ, в котором нет человека с таким именем.

Ваше обновление будет выглядеть так

db.collection.update({
  _id: 1,
  persons: {
    $not: { $elemMatch: { name: "Ho" } }
  }
}, { $push: { persons: { name: "Ho", age: 30 } } })

...