Sha*_*Ali 8 java mongodb mongodb-query
我有一个mongo集合,如:
{
"_id": ObjectId("55cad746aed75601b4822cc9"),
"entityId": "12",
"entityType": "a",
"nameIdentity": [{
"fName": "abc",
"lName": "def",
"dob": "00",
"address": "xyz"
},
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用mongodb java 3.0驱动程序并尝试匹配和更新.例如:我试图匹配,entityId如果它找到然后添加新的nameIdentity.
我第二次通过
{
"fName": "123",
"lName": "456",
"dob": "00",
"address": "789"
}
Run Code Online (Sandbox Code Playgroud)
对于我的entityId: 12匹配,那么我的新系列应该是这样的:
{
"_id": ObjectId("55cad746aed75601b4822cc9"),
"entityId": "12",
"entityType": "a",
"nameIdentity": [{
"fName": "abc",
"lName": "def",
"dob": "00",
"address": "xyz"
}, {
"fName": "123",
"lName": "456",
"dob": "00",
"address": "789"
}]
}
Run Code Online (Sandbox Code Playgroud)
我想将它添加到相同的匹配对象或集合中.但它取代了以前的数组,并添加了这样的新:
{
"_id": ObjectId("55cad746aed75601b4822cc9"),
"entityId": "12",
"entityType": "a",
"nameIdentity": [
{
"fName": "123",
"lName": "456",
"dob": "00",
"address": "789"
}
]
}
Run Code Online (Sandbox Code Playgroud)
当实体ID匹配时,我想要添加所有内容而不更新.我试过的代码是:
mongoDatabase.getCollection("entity").findOneAndUpdate(
updateDocument, new Document("$set",entityDocument));
Run Code Online (Sandbox Code Playgroud)
我试过$push和$set.它创建了一个新nameIdentity阵列.但我想添加相同的匹配nameIdentity数组.有什么建议我哪里出错了?
你应该使用$ push如下:
db.collection.update({
"entityId": "12"
}, {
$push: {
"nameIdentity": {
"fName": "123",
"lName": "456",
"dob": "00",
"address": "789"
}
}
})
Run Code Online (Sandbox Code Playgroud)
使用mongo java驱动程序的等效查询类似于(测试过):
db.getCollection("entity").updateOne(new Document("entityId", "12"),
new Document("$push", new Document("nameIdentity", new Document("fName", "123").append("lName", "456")
.append("dob", "00").append("address", "789"))));
Run Code Online (Sandbox Code Playgroud)
如果要更新许多文档,请使用updateMany而不是updateOne传递必需的参数.
| 归档时间: |
|
| 查看次数: |
7388 次 |
| 最近记录: |