MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Ändern Sie die Reihenfolge, in der Eigenschaften in MongoDB angezeigt werden

Die obige Frage und Antwort sind ziemlich alt. Wie auch immer, wenn jemand dies besucht, sollte ich hinzufügen:

Diese Antwort ist völlig falsch. Tatsächlich SIND in Mongo-Dokumenten geordnete Schlüssel-Wert-Paare. Bei Verwendung von Pymongo werden jedoch Python-Diktate für Dokumente verwendet, die tatsächlich nicht geordnet sind (ab Cpython 3.6 behalten Python-Dikte die Reihenfolge bei, dies wird jedoch als Implementierungsdetail betrachtet). Dies ist jedoch eine Einschränkung des Pymongo-Treibers.

Beachten Sie, dass diese Einschränkung tatsächlich die Benutzerfreundlichkeit beeinträchtigt. Wenn Sie die Datenbank nach einem Filialdokument abfragen, wird es nur übereinstimmen, wenn die Reihenfolge der Schlüssel-Wert-Paare korrekt ist.

Probieren Sie einfach selbst folgenden Code aus:

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

Jedes Mal, wenn dieser Code ausgeführt wird, wird das „selbe“ Dokument zur Sammlung hinzugefügt. Daher „sollte“ jedes Mal, wenn wir dieses Code-Snippet ausführen, der gedruckte Wert um eins steigen. Dies ist nicht der Fall, weil nur Maches-Unterdokumente mit der richtigen Reihenfolge gefunden werden, sondern Python-Diktate fügen die Unterdokumente einfach in beliebiger Reihenfolge ein.

Sehen Sie sich die folgende Antwort an, wie Sie das geordnete Diktat verwenden, um dies zu überwinden:https://stackoverflow.com/a/30787769/4273834