Ten problem jest wspólny dla kilku dostępnych warstw abstrakcji na szczycie MongoDB. Wszystko powraca do podstawowego powodu: nie ma ekwiwalentu enum w json/bson. Salat na przykład ma ten sam problem.
W rzeczywistości kierowca MongoDB Java nie obsługuje teksty stałe jak można przeczytać w dyskusji dzieje tutaj: https://jira.mongodb.org/browse/JAVA-268, gdzie można zobaczyć, że problem jest nadal otwarty. Większość frameworków, w których widziałem używanie MongoDB z Javą, nie implementuje funkcjonalności niskiego poziomu, takich jak ta. Myślę, że wybór ten ma wiele sensu, ponieważ pozostawiają ci wybór, jak radzić sobie ze strukturami danych, które nie są obsługiwane przez sterownik niskiego poziomu, zamiast narzucać ci, jak to zrobić.
Ogólnie uważam, że brak wsparcia nie pochodzi z ograniczeń technicznych, ale raczej z wyboru projektu. W przypadku wyliczeń istnieje wiele sposobów mapowania ich za pomocą ich zalet i wad, podczas gdy inne typy danych są prawdopodobnie prostsze. Nie znam sterownika Java MongoDB, ale myślę, że obsługa wielu "trybów" wymagałaby refaktoryzacji (może dlatego mówią o nowej wersji serializacji?)
To są dwie strategie, którymi jestem myślenie o:
- Jeśli chcesz indeksu na wyliczenia i minimalizacji zajmowanej przestrzeni, będzie mapować enum do liczby całkowitej (nie używając porządkowa, proszę can set enum start value in java).
- Jeśli problemem jest queryability na mongoshell, ponieważ Twoje dane będą dostępne przez naukowca danych, należy raczej zapisać enum używając jego wartość ciągu
Podsumowując, nie ma nic złego w dodaniu danych pośrednią struktura między twoim natywnym obiektem a MongoDB. Salat wspiera go poprzez CustomTransformers, na Morphie może trzeba będzie koniecznie dokonać konwersji. Idź po to.
Co dokładnie masz na myśli przez "kolekcję' _ <: Enumeration "? Masz na myśli 'Seq [_ <: Enumeration]' (który jest taki sam jak 'Seq [Enumeration]', chyba że 'Seq' jest zmienny), czy masz na myśli coś innego? –
Sequ of ** A extends Enumeration ** – jdevelop
Czy próbowałeś użyć 'A.Value' zamiast' A.type'? Czy błędnie interpretuję cel "Seq"? –