Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java在MongoDb中更新数组中的嵌入文档而无需重复_Java_Mongodb - Fatal编程技术网

使用Java在MongoDb中更新数组中的嵌入文档而无需重复

使用Java在MongoDb中更新数组中的嵌入文档而无需重复,java,mongodb,Java,Mongodb,我的文档中有以下结构: { "_id": 11111, "user": "user@mail.com", "sites": [ { "sitename": "site1", "url": "site2.com", "keywords": [], }, { "sitename": "site2", "url": "site2.com", "keywords": [], },

我的文档中有以下结构:

{
  "_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的站点数组中。如果sitename已经有,则不应添加该站点。我怎样才能做到这一点呢?

类似于

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

如果要为sitename添加子文档

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

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

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

如果要为sitename添加子文档

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

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

更新答案:

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

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

更新答案:

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

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

我想在数组中添加新的站点嵌入文档。不仅仅是新闻,我已经按照你的要求更新了我的答案。请尝试一下。我想在数组中添加新的站点嵌入文档。不仅仅是新闻,我已经按照你的要求更新了我的答案。请尝试一下。我想将嵌入的文档添加到数组中。不仅仅是newsite,我还想将嵌入的文档添加到数组中。不仅仅是新闻网站