Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add multiple values using $addToSet Mongo operator

Tags:

arrays

mongodb

$addToSet operator adds a value to an array only if the value is not already in the array. If the value is in the array, $addToSet does not modify the array.

I want to insert two values that should not be duplicated via one request. Is this possible?

I tried to pass an array to $addToSet operator but it inserted an array instead of each value from that array.

$ 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 ] ] }
like image 941
Ionică Bizău Avatar asked Apr 18 '14 12:04

Ionică Bizău


2 Answers

From the docs for $addToSet:

If the value is an array, $addToSet appends the whole array as a single element. To add each element of the value separately, use $addToSet with the $each modifier. See Modifiers for details.

So you should use this instead:

db.c.update({}, {$addToSet: {a: {$each: [2, 4]}}})
like image 59
JohnnyHK Avatar answered Nov 16 '22 07:11

JohnnyHK


Yep. But you need the $each modifier to be added in your statement:

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

And the result:

{ "a" : [ 1, 2, 3, 4 ] }
like image 44
Neil Lunn Avatar answered Nov 16 '22 08:11

Neil Lunn