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