В драйвере MongoDB для Java как мне обновить документ в списке документов?

#java #mongodb

#java #mongodb

Вопрос:

У меня уже есть документ в базе данных, который может быть представлен следующим образом:

 {
    _id: 1,
    field1: "hello"
    field2: 2,
    listField: [
        {
            subField1: ...,
            subField2: ...
        },
        {
            subField1: ...,
            subField2: ...
        }
    ]
}
  

Я создал другой документ, который будет использоваться для обновления документа с идентификатором 1. Это может быть представлено следующим образом:

 Document newDocument = {
    field1: "goodbye",
    field3: 3,
    listField: [
        {
            subfield3: ...
        },
        {
            subfield3: ...
        }
    ]
}
  

Ожидаемый результат следующий:

 {
    _id: 1,
    field1: "goodbye"
    field2: 2,
    field3: 3,
    listField: [
        {
            subField1: ...,
            subField2: ...,
            subField3: ...
        },
        {
            subField1: ...,
            subField2: ...,
            subField3: ...
        }
    ]
}
  

Как это можно выполнить с помощью драйвера Java? Ранее я пытался выполнить это с помощью

 collection.updateOne(Filters.eq("_id", new ObjectId(1)), new Document("$set", newDocument));
  

Однако вместо этого этот метод выдает следующий результат:

 {
    _id: 1,
    field1: "goodbye"
    field2: 2,
    field3: 3,
    listField: [
        {
            subField3: ...
        },
        {
            subField3: ...
        }
    ]
}
  

Проблема заключается в том, что поле ListField заменяется новым полем. Я хочу, чтобы каждый документ в ListField был обновлен новыми подполями вместо этого. Что я должен делать по-другому для достижения этой цели?

Комментарии:

1. Какое обновление вы хотите, на словах?

2. В основном, как говорится в названии. У меня есть документ, который содержит список документов. Я создаю второй документ, который также содержит список документов с тем же именем поля. В каждом из этих документов есть новое поле, которое я хочу добавить к каждому документу в старом. В настоящее время вместо обновления документов в списке он заменяет каждый из них.

3. Первый шаг — выяснить, как выполнить вашу задачу с помощью оболочки MongoDB. Как только вы это сделаете, обычно просто написать код драйвера Java, чтобы сделать то же самое. Я думаю, вам нужно будет использовать агрегацию для объединения документов, в частности, оператор $ mergeObjects . В зависимости от того, где / как все хранится, вам может потребоваться использовать $mergeObjects в конвейере этапа $ lookup .