你可以在Mongo中为$ addToSet指定一个键吗?

我有一个文件:

{ 'profile_set' : [ { 'name' : 'nick', 'options' : 0 }, { 'name' : 'joe', 'options' : 2 }, { 'name' : 'burt', 'options' : 1 } ] } 

如果名称不存在(无论选项是否存在),还想向profile_set集添加一个新文档。

所以在这个例子中,如果我试图添加:

{'name' : 'matt', 'options' : 0}

它应该添加它,但添加

{'name' : 'nick', 'options' : 2}

应该什么都不做,因为即使option不同,文档已经以名称nick存在。

蒙戈似乎与整个元素相匹配,我最终检查是否是相同的,我结束了

 profile_set containing [{'name' : 'nick', 'options' : 0}, {'name' : 'nick', 'options' : 2}] 

有没有办法做到这一点与$ addToSet或我必须推另一个命令?

您可以使用查询对象限定update ,如果name已经存在于profile_set则查询对象将阻止更新。 在shell中:

 db.coll.update( {_id: id, 'profile_set.name': {$ne: 'nick'}}, {$push: {profile_set: {'name': 'nick', 'options': 2}}}) 

所以这只会执行一个匹配_id的文档的$push ,并且在那里没有一个profile_set元素,其中name'nick'