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