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