Подтвердить что ты не робот

Добавьте несколько значений с помощью оператора $addToSet Mongo

$addToSet operator добавляет значение в массив только в том случае, если значение уже не находится в массиве. Если значение находится в массиве, $addToSet не изменяет массив.

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

Я попытался передать массив в оператор $addToSet, но он вставил массив вместо каждого значения из этого массива.

$ mongo test
MongoDB shell version: 2.4.9
connecting to: test
> db.c.insert({a: [1, 2, 3]})
> db.c.find()
{ "_id" : ObjectId("53511a255a82cd559393d840"), "a" : [ 1, 2, 3 ] }
> db.c.update({}, {$addToSet: {a: [2, 4]}})
> db.c.find()
{ "_id" : ObjectId("53511a255a82cd559393d840"), "a" : [ 1, 2, 3, [ 2, 4 ] ] }
4b9b3361

Ответ 1

Из документов для $addToSet:

Если значение представляет собой массив, $addToSet добавляет весь массив как один элемент. Чтобы добавить каждый элемент значения отдельно, используйте $addToSet с помощью модификатора $each. Подробнее см. В разделе "Модификаторы".

Поэтому вы должны использовать это вместо:

db.c.update({}, {$addToSet: {a: {$each: [2, 4]}}})

Ответ 2

Угу. Но вам нужен модификатор $each, который будет добавлен в ваш оператор:

db.c.update({},{ $addToSet: { a: {$each: [ 2, 4 ] } } })

И результат:

{ "a" : [ 1, 2, 3, 4 ] }