簡體   English   中英

使用Java更新數組中的嵌入式文檔,而無需在MongoDb中重復

[英]Update Embedded Documents in array without Repeating in MongoDb using Java

我的文檔中具有以下結構:

{
  "_id": 11111,
  "user": "user@mail.com",
  "sites": [
    {
      "sitename": "site1",
      "url": "site2.com",
      "keywords": [],
    },
    {
      "sitename": "site2",
      "url": "site2.com",
      "keywords": [],
    },
    {
      "sitename": "site2",
      "url": "site2.com",
      "keywords": [],
    },
  ]
},{
  "_id": 2222,
  "user": "user2@mail.com",
  "sites": []
}

我將通過ID(id:11111)查找該文檔。有多個文檔。 然后,我想向包含1111 _id的文檔中的站點數組添加新站點。 如果站點名稱已經存在,則不應添加該站點。 我該如何實現?

就像是

db.collection.update({_id:11111, 'sites.sitename' : {$exists:false}},
 {$set : {'sites.$.sitename':'newsite.com'}},{multi:true})

編輯

如果要添加站點名稱的子文檔

var sub = {'a':'a','b':'b'};

db.collection.update({_id:11111, 'sites.sitename' : {$exists:false}},
     {$set : {'sites.$.sitename':sub}},{multi:true})

更新的答案:

您可以檢查_id為'11111',然后檢查該sitename不存在並且不等於新的站點名稱。 然后,您可以$push嵌入式文檔$push到數組中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM