Горният въпрос и отговор са доста стари. Както и да е, ако някой посети това, смятам, че трябва да добавя:
Този отговор е напълно погрешен. Всъщност в Mongo Documents СА подредени двойки ключ-стойност. Въпреки това, когато се използва pymongo, той ще използва python dicts за документи, които наистина не са подредени (от cpython 3.6 python dicts запазват реда, но това се счита за детайл за реализация). Но това е ограничение на драйвера на pymongo.
Имайте предвид, че това ограничение всъщност влияе върху използваемостта. Ако заявите db за поддокумент, той ще съвпадне само ако редът на двойките ключ-стойности е правилен.
Просто опитайте сами следния код:
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())
Всеки път, когато този код се изпълнява, "същият" документ се добавя към колекцията. По този начин всеки път, когато стартираме този кодов фрагмент, отпечатаната стойност „трябва“ да се увеличава с едно. Това не е така, защото find само maches subdocuemnts с правилния ред, но python dicts просто вмъкват поддокумента в произволен ред.
вижте следния отговор как да използвате подреден dict, за да преодолеете това:https://stackoverflow.com/a/30787769/4273834