#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));