2012-07-13 15 views
7

Estoy accediendo a la base de datos de Mongo desde Clojure usando la biblioteca Monger. Una cosa que me molesta es ir y venir entre instancias y cadenas de ObjectId.Asignación de Mongodb ObjectId hacia y desde la cadena automáticamente

Por ejemplo, el presente código (mc/find-maps "posts" {}) evaluará a los mapas con el valor de _id entrada se establece en los casos de ObjectId clase, mientras que en mi aplicación me resulta más útil simplemente lo tienen como una cadena para la que sé que es es único.

Por otro lado para expresiones como: (mc/find-map-by-id "posts" (new ObjectId id)) donde utilizo un objeto String para el parámetro id, tengo que usarlo para construir una instancia de ObjectId.

¿Hay alguna manera de hacer que los valores de _id se conviertan entre cadenas en la aplicación y ObjectId en el lado de mongo de forma automática y transparente? ¿Algún tipo de opción que, cuando está habilitada, crea mapas con representaciones de cadena de identificadores, y viceversa convierte representaciones de cadena de ids t id de objeto cuando se utilizan como parámetros en consultas?

Si no, ¿qué otras estrategias hay disponibles?

Respuesta

2

Te compadezco en este punto. Volver a ObjectID es molesto, porque siempre tienes que convertir de ida y vuelta, y si lo olvidas, es un error difícil de detectar.

Su mejor opción es ajustar el código del controlador para realizar las conversiones automáticamente. Así que reemplace find, findOne, insert, con un thin wrapper que mire el tipo y realice las conversiones automáticamente, ya sea que ingrese o salga.

Lamentablemente, no creo que haya una manera más fácil.

Cuestiones relacionadas