Как сохранить набор в MongoDB с Java?

Клиент Java MongoDB внутренне преобразует наборы в списки при их сохранении. В результате элементы имеют определенный порядок. При поиске вставленного набора вы можете его пропустить, когда преобразование набора в список приводит к другому порядку. Итак, как хранить наборы?

(Можно преобразовать набор в список и отсортировать его перед поиском / сохранением, но это довольно дорого.)

Пример кода:

Set<String> set = new HashSet<>();
set.add("b");
set.add("a");
Document doc = new Document();
doc.put("set", set);
collection.insertOne(doc);
// next line would throw a ClassCastException
// set = ((Set<String>) doc.get("set")); 
set = new HashSet<String>((List<String>) doc.get("set"));

//searching for the set seems to work
doc = collection.find(Filters.eq("set", set)).first(); // <- not null
//but unfortunately, searching for 'set2' returns null, because it produces a different list as 'set'
Set<String> set2 = new LinkedHashSet<>();
set2.add("b");
set2.add("a");
doc = collection.find(Filters.eq("set", set2)).first(); // <- null

какие-нибудь обновления здесь?

Andy Aldo 09.12.2018 06:41

к сожалению нет, я решил заранее отсортировать свои значения

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

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