如何使用具有新值的java在mongodb中的现有集合中追加现有数组

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数组.有什么建议我哪里出错了?

Vis*_*was 7

你应该使用$ 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传递必需的参数.