Я столкнулся с проблемой при обновлении поддокумента через java-драйвер MongoDB.
Структура документа
{
"_id" : ObjectId("5c442474c1c50dbe19898e27"),
"address" : {
"apartmentName" : "apartment 1",
"apartmentNo" : 1
},
"entityId" : "Id1",
"entityName" : "Name1"
}
Я обновляю документ из Pojo-'pojoObject', как показано ниже:
ObjectMapper mapper=JsonFactory.create();
String jsonString = mapper.toJson(pojoObject);
Document doc=new Document("$set",Document.parse(jsonString));
database.getCollection("CollectionName",pojoObject.getClass())
.updateOne(Filters.eq("entityId",pojoObject.getEntityId()),doc);
Теперь, если мои поля pojo указаны ниже (другие поля равны нулю), он правильно обновляет «entityName».
Fields- {"entityName":"Name2","entityId":"Id1"}
{
"_id" : ObjectId("5c442c0fc1c50dbe19898e59"),
"address" : {
"apartmentNo" : 1,
"apartmentName" : "apartment 1"
},
"entityId" : "Id1",
"entityName" : "Name2"}
Однако, если я обновлю только один термин во вложенном документе (другие поля пусты), весь вложенный документ будет заменен.
Fields- {"entityId":"Id1","address":{"apartmentNo":5}}
{
"_id" : ObjectId("5c442c0fc1c50dbe19898e59"),
"address" : {
"apartmentNo" : 5
},
"entityId" : "Id1",
"entityName" : "Name2"
}
т.е. Поле apartmentName также заменяется.
Есть ли способ обновить apartmentNumber без замены других полей в поддокументе?
Заранее спасибо
ОБНОВИТЬ
pojoObject создается, как показано ниже:
PojoObject pojoObject = new PojoObject();
pojoObject.setEntityId("Id1");
pojoObject.setEntityName(null);
Address address=new Address();
address.setApName(null);
address.setApNo(12);
pojoObject.setAddress(address);
Я обновил вопрос сейчас :)




поделитесь, как вы создаете второй объект pojo. изменения касаются обновления списка