Обновление вложенных документов в mongodb (драйвер Java)

Я столкнулся с проблемой при обновлении поддокумента через 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. изменения касаются обновления списка

Chamly Idunil 21.01.2019 07:56

Я обновил вопрос сейчас :)

Gautham Sivakumar 21.01.2019 08:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
139
0

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