Как добавить существующий массив в существующую коллекцию в 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());