我的文档中具有以下结构:

{
  "_id": 11111,
  "user": "[email protected]",
  "sites": [
    {
      "sitename": "site1",
      "url": "site2.com",
      "keywords": [],
    },
    {
      "sitename": "site2",
      "url": "site2.com",
      "keywords": [],
    },
    {
      "sitename": "site2",
      "url": "site2.com",
      "keywords": [],
    },
  ]
},{
  "_id": 2222,
  "user": "[email protected]",
  "sites": []
}


我将通过ID(id:11111)查找该文档。有多个文档。然后,我想向包含1111 _id的文档中的站点数组添加新站点。如果站点名称已经存在,则不应添加该站点。我该如何实现?

最佳答案

更新的答案:

您可以检查_id是否为'11111',然后检查sitename不存在并且不等于新的站点名称。然后,您可以将嵌入的文档$push放入数组中。

db.collection.update(
 {
    _id:11111,
    'sites.sitename' : {$exists:false},
    'sites.sitename' : {$ne:'site4'}
 },
 {
    $push:
    {
        'sites':
        {
            "sitename": "site4",
            "url": "site4.com",
            "keywords": []
        }
    }
 },
 {
    multi:true
 }
)

08-16 18:26