【问题标题】:Add multiple values using $addToSet Mongo operator使用 $addToSet Mongo 运算符添加多个值
【发布时间】:2014-04-18 20:37:45
【问题描述】:

$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 ] ] }

【问题讨论】:

    标签: arrays mongodb


    【解决方案1】:

    来自the docs for $addToSet

    如果值是一个数组,$addToSet 将整个数组追加为 单个元素。要分别添加值的每个元素,请使用 $addToSet$each 修饰符。有关详细信息,请参阅修饰符。

    所以你应该改用这个:

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

    【讨论】:

    • @IonicăBizău 随便。您知道,如果您打算添加问答类型的回复,您实际上可以在一次提交中同时进行问答。这避免了像我们这样的人只提交答案,因为您实际上同时做了这两个。我打赌在某处重复
    • 当我问这个问题时,我不知道答案。但是在发布之后我记得有 $each 可能与此相关的运营商。 :-)
    【解决方案2】:

    是的。但是您需要在语句中添加 $each 修饰符:

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

    结果:

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

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2016-03-24
      • 2016-11-04
      • 2021-06-12
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2014-08-09
      • 2019-05-13
      相关资源
      最近更新 更多