2012-07-13 10 views
7

Uzyskuję dostęp do bazy danych Mongo z Clojure przy użyciu biblioteki Monger. Jedną z rzeczy, która mnie denerwuje, jest przełączanie się pomiędzy instancjami i ciągami ObjectId.Automatyczne odwzorowywanie obiektu Mongodb ObjectId na i z ciągu znaków

Na przykład, ten kod (mc/find-maps "posts" {}) oceni na mapach o wartości _id wpisu ustawiony instancji ObjectId klasy, natomiast w moim app Uważam to bardziej przydatne, aby po prostu mieć go jako ciąg, dla których wiem, że jest unikalny.

Z drugiej strony dla wyrażeń takich jak: (mc/find-map-by-id "posts" (new ObjectId id)) gdzie używam obiektu String dla parametru id, muszę go użyć do skonstruowania instancji ObjectId.

Czy istnieje sposób, aby wartości _id konwertować między ciągów w aplikacji i ObjectId na stronie mongo automatycznie i przejrzyście? Jakaś opcja, która po włączeniu tworzy mapy z ciągami reprezentującymi identyfikatory i odwrotnie, przekształca ciągi reprezentacji identyfikatorów ids id obiektów, gdy są używane jako parametry w zapytaniach?

Jeśli nie, jakie inne strategie są dostępne?

Odpowiedz

2

Dzielę się bólem w tej kwestii. Odzyskiwanie ObjectID jest denerwujące, ponieważ zawsze musisz się nawracać, a jeśli zapomnisz, to trudno złapać błąd.

Najlepszym rozwiązaniem może być automatyczne owinięcie kodu sterownika w celu przeprowadzenia konwersji. Zastąp więc find, findOne, insert, cienkim opakowaniem, który sprawdza typ i automatycznie dokonuje konwersji niezależnie od tego, czy wchodzisz, czy wychodzisz.

Niestety, nie sądzę, że jest łatwiejszy sposób.

Powiązane problemy