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.

Другие вопросы по тегам