Классы и обновления BSON в mongo

#java #mongodb #bson #upsert

Вопрос:

У меня есть коллекция mongo, и я определил все элементы как классы BSON. например.

 _id: 12345 
Person
-> Name
     surname: smith
     forename: john 
-> Address
     number: 1
     street: the street
 

Используя это чтение, данные просты, и они хорошо выводятся в классе, поэтому любые потребители ничего не знают о монго.

Теперь для обновлений я просто хотел бы ввести ключ клиента, например _id, и обновить адрес, но передать класс адреса.

поэтому обновите(_id, Address.class)

    updateAccount(String personId, Account account) {
    
       // set up connection to mongo etc...

       // Update record
       Document updDocQuery = new Document("_id", personId);
       Bson update = new Document("$set", address);
       UpdateOptions updateOptions = new UpdateOptions().upsert(true)

       mongoCollection.updateOne(updDocQuery, update, updateOptions);
   }
 

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

Любые указания будут с благодарностью приняты.

Ответ №1:

Я думаю, что ответил на свой собственный вопрос…но меня нужно поправить.

Я обнаружил, что могу передавать местоположение документа с помощью обновлений.установить;

 mongoCollection.updateOne(documentId, Updates.set("Person.Address", address));