#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 .