使用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,我还想将嵌入的文档添加到数组中。不仅仅是新闻网站