Как добавить существующий массив в существующую коллекцию в mongodb с помощью java с новыми значениями

у меня есть коллекция монго, как:

{
    "_id": ObjectId("55cad746aed75601b4822cc9"),
    "entityId": "12",
    "entityType": "a",
    "nameIdentity": [{
        "fName": "abc",
        "lName": "def",
        "dob": "00",
        "address": "xyz"
    },

    ]
}

я использую mongodb java 3.0 драйвер и пытается соответствовать и обновления. Например: я пытаюсь соответствовать на entityId если он найден, то добавьте новый тег nameIdentity.

второй раз, когда я прохожу мимо

{
    "fName": "123",
    "lName": "456",
    "dob": "00",
    "address": "789"
}

для меня 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"
    }]
}

Я хочу, чтобы добавить его в тот же объект или коллекция. Но его замена предыдущего массива и добавление нового вот так:

{
    "_id": ObjectId("55cad746aed75601b4822cc9"),
    "entityId": "12",
    "entityType": "a",
    "nameIdentity": [

    {
        "fName": "123",
        "lName": "456",
        "dob": "00",
        "address": "789"
    }
    ]
}

когда идентификатор сущности сопоставлен, я хочу, чтобы все было добавлено не обновлено. Код, который я пробовал:

mongoDatabase.getCollection("entity").findOneAndUpdate(
    updateDocument, new Document("$set",entityDocument));

Я пробовал с $push и $set. Его создание нового nameIdentity массив. Но я хочу добавить в же nameIdentity массив. Есть предложения, где я ошибаюсь ?

2 ответов


вы должны использовать $push следующее:

db.collection.update({
    "entityId": "12"
}, {
    $push: {
    "nameIdentity": {
        "fName": "123",
        "lName": "456",
        "dob": "00",
        "address": "789"
    }
    }
})

его эквивалентный запрос с использованием драйвера 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"))));

Если вы хотите обновить много документов, используйте updateMany вместо updateOne путем проходить необходимые params.


вы в основном хотите $push и добавьте сюда запись именованного массива. Но для .findOneAndUpdate() вам также необходимо установить ReturnDocument введите для получения результата.

в противном случае возвращается" исходный " документ, как и для всех драйверов.

    Document entityDocument = new Document();
    entityDocument.append("fname","123");
    entityDocument.append("lname","456");
    entityDocument.append("dob","00");
    entityDocument.append("address","789")

    Document doc = mongoDatabase.getCollection("entity").findOneAndUpdate(
            new Document("entityId", 12),
            new Document("$push", new Document("nameIdentity", entityDocument)),
            new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
    );

    System.out.println(doc.toJson());