$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 ] ] }
答案 0 :(得分:56)
如果值是数组,
$addToSet
将整个数组附加为a 单个元素。要分别添加值的每个元素,请使用$addToSet
使用$each
修饰符。有关详细信息,请参阅修改器。
所以你应该使用它:
db.c.update({}, {$addToSet: {a: {$each: [2, 4]}}})
答案 1 :(得分:4)
是的。但您需要在语句中添加 $each
修饰符:
db.c.update({},{ $addToSet: { a: {$each: [ 2, 4 ] } } })
结果:
{ "a" : [ 1, 2, 3, 4 ] }