Ovanstående fråga och svar är ganska gamla. Hur som helst, om någon besöker detta känner jag att jag borde lägga till:
Detta svar är helt fel. Faktum är att i Mongo-dokument ÄR beställda nyckel-värdepar. Men när du använder pymongo kommer den att använda python-dikt för dokument som verkligen inte är beställda (från och med cpython 3.6 behåller python-dikt ordning, men detta anses vara en implementeringsdetalj). Men detta är en begränsning för pymongo-drivrutinen.
Var medveten om att denna begränsning faktiskt påverkar användbarheten. Om du frågar i db för ett underdokument kommer det bara att matcha om ordningen på nyckel-värdeparen är korrekt.
Prova bara följande kod själv:
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())
Varje gång den här koden körs läggs "samma" dokument till i samlingen. Så varje gång vi kör det här kodavsnittet bör det utskrivna värdet "ska" öka med ett. Det gör det inte för att du bara hittar maches underdokument med rätt ordning, utan python dicts infogar bara underdokumentet i godtycklig ordning.
se följande svar hur man använder beordrad dict för att övervinna detta:https://stackoverflow.com/a/30787769/4273834