2012-07-19 14 views
11

estoy desarrollando esta pieza de software en el nodo y MongoDB en la que yo quiero esencialmente para almacenar versiones de los paquetes con la siguiente estructura:¿Cómo trato los puntos en los nombres de las teclas MongoDB?

{ 
    "versions": 
    { 
     "1.2.3": { stuff } 
    } 
} 

(similar a como lo hace la NGP cosas en la cama)

El problema es que cuando actualicé MongoDB descubrí que no permite puntos en los nombres de las teclas (debido a la notación de puntos existente), lo que hace que mi código falle. Después de investigar esto, todo lo que pude encontrar es que necesitas transformar los puntos en algún otro personaje antes de almacenarlos en el archivo db, y luego volverlos a transformar cuando accedas. ¿Realmente no hay una mejor manera de lidiar con esto?

Si no lo hay, ¿cómo puedo hacer esta transformación sin copiar los datos a otra clave y eliminar el original?

+0

¿Estás diciendo que ya tienes datos como esos en Mongo? Eso no debería haber sido posible incluso antes de la actualización. ¿Qué versión estabas usando? – Thilo

+0

@Thilo Realmente no lo recuerdo, pero puede haber sido el conductor el que tenía errores y lo permitió. – jli

+0

@ c0deNinja Me permite buscar por nombre de versión sin iterar a través de todo el conjunto de posibles muchas versiones. – jli

Respuesta

2

restricciones de puntos son actualmente conductor forzada, y no todos los pilotos han impedido puntos en nombres de campo desde el inicio. Puede escribir código de protocolo en bruto para hacer todo tipo de cosas locas en Mongo, incluido el uso de caracteres realmente extraños en los nombres de las colecciones.

Estará mucho mejor si limpia eso (probablemente reemplace los puntos con - u otro personaje válido), pero será difícil hacerlo bien con cualquier tipo de filtrado inteligente. Lo más probable es que necesite iterar a través de toda la colección, modificar los valores en su aplicación y luego sobrescribir todo el campo de "versiones" en su documento. En el lugar se sobrescribe esto debe ser razonablemente rápido ya que no cambiarán el tamaño del documento, y probablemente no cambie ningún índice.

+0

Sí, eso es lo que pensé ... un problema aquí es que los usuarios de esta aplicación pueden agregar cualquier cadena como una versión, por lo que no tengo un estándar con el que trabajar. ¿Reduciría la velocidad de realizar estas operaciones en cada lectura más que el beneficio de rendimiento de mongo en comparación con algo así como un sofá? Puedo simplemente cambiar las bases de datos ya que el proyecto está en un desarrollo muy temprano en este momento. – jli

+0

En realidad, parece que será relativamente rápido en las pruebas, gracias. – jli

+0

¿De verdad necesita una consulta dentro de las versiones del documento? En realidad, podría almacenar una cadena json en "versiones" y simplemente analizarla manualmente en el momento de cargar/ver. Hacer el procesamiento de cadenas en lecturas probablemente no disminuirá mucho, la velocidad de lectura en Mongo es mucho más rápida que en Couch. – MrKurt

3

¿Puedes usar una colección de versiones con estas cosas?

igual:

{ 
    "versions": 
    [ 
       { 
        "version_num": "1.2.3", 
        "stuff": { stuff } 
       }, 
       { 
        "version_num": "1.2.4", 
        "stuff": { stuff } 
       } 
    ] 
} 
+0

Bueno, además de ser un objeto inválido,' Estoy tratando de evitar tener que iterar sobre una matriz aquí. – jli

+0

Sí, no es válido, solo me preguntaba si una matriz funcionaría. Okey – keaplogik

Cuestiones relacionadas