MongoDB $ addToSet再次使用不同的键排序添加对象

时间:2016-11-22 20:07:16

标签: mongodb

使用$addToSet时,如果我运行两次,它会输入重复的对象,但namekey的顺序相反。反正有没有这个避免这个,所以它只会增加一次?

var categories = [{
  name: 'One',
  key: 'one'
}]

User.update({_id : id}, {$addToSet : {'items' : {$each : categories }}});

1 个答案:

答案 0 :(得分:3)

看起来$addToSet与对象完全匹配,包括属性的顺序。 $addToSet运算符无法识别属性是否为任意顺序(如OP中所述)。

但是,当属性的顺序不相同时,$elemMatch工作正常(即,它可以发现嵌入的文档已在数组中可用)。因此,解决方法的解决方案是使用$elemMatch$not来检查数组中是否存在值,如果不存在则更新。

var categories = [{
key: 'one',  
    name: 'One'
}]
db.collection.update({"_id" : ObjectId("5834bd23ba41f1f22e600c7d"), "items" : {$not : {$elemMatch : categories[0]}}}, {$addToSet : {'items' : {$each : categories }}});