你能指定一把钥匙给Mongo中的$addToSet吗?

2024-06-16 11:02:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份文件:

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

如果名称不存在(无论选项如何),则希望将新文档添加到配置文件集。

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

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

它应该添加它,但是添加

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

不应执行任何操作,因为名为nick的文档已经存在,即使option不同。

Mongo似乎与整个元素匹配,我最后检查它是否相同

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

有没有办法用$addToSet来完成这个操作,或者我必须推送另一个命令?


Tags: 文件name文档名称配置文件选项mattprofile
1条回答
网友
1楼 · 发布于 2024-06-16 11:02:04

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

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

因此,这将只对具有匹配的_id的文档执行$push,并且没有profile_set元素,其中name'nick'

相关问题 更多 >