Mongodb Java вложенное обновление
У меня есть структура документа MongoDB, как это
{
"_id": "002",
"list": [
{
"year": "2015",
"entries": [{...}, {...}]
},
{
"year": "2014",
"entries": [{...}, {...}]
}
]
}
Я хочу вставить новый элемент в "записи". Я знаю, что это возможно, используя
collection.updateOne(
Filters.eq("_id", "002"),
new Document("$push", new Document("list.0.entries", "{...}")
);
Но это добавляется к "записям" 1-го элемента "списка". Я хочу добавить "записи" для " 2015" года. Как это сделать с помощью API драйвера Java MongoDB (3.0)?
2 ответа
Я думаю, что вы должны использовать что-то вроде
Filters.and(Filters.eq("_id", "002"), Filters.eq("list.year", "2015"))
PS Как предполагает javadoc "Фильтры", для него удобно использовать статический импорт (чтобы сделать его менее подробным, пропустив часть "Фильтры").
Ты можешь использовать
Bson filter = Filters.and(Filters.eq("_id", "002"), Filters.eq("list", Filters.eq($elemMatch, Filters.eq("year", "2015"))
Document list = collection.find().filter(filter)
После этого вы можете перебрать список, чтобы найти 2015 год, получить записи для него и вставить новый элемент с помощью кода Java. Сохраните обновленный список в локальной переменной и запишите его с помощью команды update в свой mongoDB.