上記の質問と回答はかなり古いものです。とにかく、誰かがこれを訪問した場合、私は追加する必要があると感じています:
この答えは完全に間違っています。実際、Mongoドキュメントでは、順序付けられたキーと値のペアがあります。ただし、pymongoを使用する場合、実際に順序付けされていないドキュメントにはpython dictが使用されます(cpython 3.6以降、python dictは順序を保持しますが、これは実装の詳細と見なされます)。ただし、これは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())
このコードが実行されるたびに、「同じ」ドキュメントがコレクションに追加されます。したがって、このコードスニペットを実行するたびに、出力される値は「1つ増えるはずです」。これは、正しい順序でサブドキュメントのみを検索するためではなく、Pythondictがサブドキュメントを任意の順序で挿入するだけだからです。
これを克服するために順序付けられたdictを使用する方法については、次の回答を参照してください:https://stackoverflow.com/a/30787769/4273834