你可以在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' 。