Есть ли удобный способ поместить элемент (документ) в массив документа mongodb с помощью Quarkus?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Есть ли удобный способ поместить элемент (документ) в массив документа mongodb с помощью Quarkus?

Сообщение Anonymous »


Я ищу удобный (и эффективный) способ поместить вложенный документ в массив существующего документа в базе данных mongodb с помощью Quarkus. В настоящее время я использую PanacheMongoRepository, но открыт для других предложений.

Мой документ mongodb выглядит так (сильно упрощенно), и я хочу добавить документ в myArray:

{ _id: "123abc...", название: "тест", мойМассив: [ { идентификатор: 1, имя: "sub1", ... }, { идентификатор: 2, имя: "sub2", ... } ] } Первое, что я попробовал, было что-то вроде этого (у меня есть POJO, представляющие документ, а также вложенные документы под «myArray»):

myEntity.getMyArray().add(myNewSubObj); myEntityRepository.update(myEntity); Это работает, но в журналах похоже, что перезаписывается весь документ mongodb. Я предпочитаю просто добавлять в массив один элемент. Я думаю, что для этого может помочь оператор $push. (например, как описано здесь: Обновить документ MongoDB с помощью вложенных массивов вложенных документов)

Если я не ошибаюсь, у меня есть что-то вроде этого, чтобы использовать оператор $push:

myEntityRepository .update(новый документ("$push", новый документ("myArray", новый документ("id", 3) .append("имя", "sub3") .добавить(...) ) )) .where("_id", "123abc..."); Это тоже похоже на возможный путь, но есть ли способ предотвратить все эти команды new Document()? Я думаю, что Panache внутри использует что-то вроде автоматического конвертера (CodecProvider). Могу ли я тоже этим воспользоваться? Или есть еще лучший способ сделать это?

Я уже пробовал это:

Кодек codec = BsonDocument.DEFAULT_CODEC_REGISTRY.get(MyEntity.class); BsonDocument документ = новый BsonDocument(); Писатель BsonDocumentWriter = новый BsonDocumentWriter (док); codec.encode(писатель, myNewSubObj, EncoderContext.builder().build()); Но я получил исключение, поскольку не существует соответствующего поставщика кодеков. Поэтому провайдер для автоматического преобразования не используется. :( При вызове myEntityRepository.update(myEntity);, как описано в начале этого поста, объект без проблем сохраняется в mongodb. Значит, этот поставщик автоконвертации должен быть там и работать.

Есть предложения?

Большое спасибо!
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»