MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Modifier l'ordre dans lequel les propriétés sont affichées dans MongoDB

La question et la réponse ci-dessus sont assez anciennes. Quoi qu'il en soit, si quelqu'un visite ceci, je pense que je devrais ajouter :

Cette réponse est complètement fausse. En fait, dans Mongo Documents, SONT des paires clé-valeur ordonnées. Cependant, lors de l'utilisation de pymongo, il utilisera des dicts python pour les documents qui ne sont effectivement pas ordonnés (à partir de cpython 3.6, les dicts python conservent l'ordre, mais cela est considéré comme un détail d'implémentation). Mais c'est une limitation du pilote pymongo.

Sachez que cette limitation a un impact réel sur la convivialité. Si vous interrogez la base de données pour un sous-document, il ne correspondra que si l'ordre des paires clé-valeur est correct.

Essayez vous-même le code suivant :

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())

Chaque fois que ce code est exécuté, le "même" document est ajouté à la collection. Ainsi, chaque fois que nous exécutons cet extrait de code, la valeur imprimée "devrait" augmenter de un. Ce n'est pas parce que ne trouve que les sous-documents maches avec le bon ordre, mais les dicts python insèrent simplement le sous-doc dans un ordre arbitraire.

voir la réponse suivante comment utiliser le dict ordonné pour surmonter cela :https://stackoverflow.com/a/30787769/4273834