sql >> Base de Datos >  >> NoSQL >> MongoDB

Modificar el orden en que se muestran las propiedades en MongoDB

La pregunta y la respuesta anteriores son bastante antiguas. De todos modos, si alguien visita esto, creo que debería agregar:

Esta respuesta es completamente incorrecta. En realidad, en Mongo Documents SON pares clave-valor ordenados. Sin embargo, al usar pymongo, usará dictados de Python para documentos que de hecho no están ordenados (a partir de cpython 3.6, los dictados de Python conservan el orden, sin embargo, esto se considera un detalle de implementación). Pero esta es una limitación del controlador pymongo.

Tenga en cuenta que esta limitación realmente afecta la usabilidad. Si consulta la base de datos para un subdocumento, solo coincidirá si el orden de los pares clave-valor es correcto.

Prueba el siguiente código tú mismo:

from pymongo import MongoClient
db = MongoClient().testdb
col = db.testcol
subdoc = {
   'field1': 1,
   'field2': 2,
   'filed3': 3
}
document = {
   'subdoc': subdoc
}
col.insert_one(document)
print(col.find({'subdoc': subdoc}).count())

Cada vez que se ejecuta este código, se agrega el 'mismo' documento a la colección. Por lo tanto, cada vez que ejecutamos este fragmento de código, el valor impreso 'debería' aumentar en uno. No lo hace porque encuentra solo los subdocumentos de Maches con el orden correcto, sino que los dictados de Python simplemente insertan el subdoc en un orden arbitrario.

vea la siguiente respuesta sobre cómo usar el dictado ordenado para superar esto:https://stackoverflow.com/a/30787769/4273834