擅长:python、mysql、java
<p>上面的问题和答案都很古老。不管怎样,如果有人来参观我觉得我应该补充一下:</p>
<p>这个答案是完全错误的。实际上在Mongo中,文档是有序的键值对。但是,当使用pymongo时,它将使用python dicts来处理确实没有排序的文档(从cpython3.6开始,python dicts保持顺序,但是这被认为是实现细节)。但这是pymongo驱动程序的一个限制。在</p>
<p>请注意,这个限制实际上会影响可用性。如果只有当查询的子键对的顺序匹配时,它才会更正。在</p>
<p>只需自己尝试以下代码:</p>
<pre><code>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())
</code></pre>
<p>每次执行此代码时,都会将“相同”文档添加到集合中。因此,每次运行此代码段时,打印的值“应该”增加1。这并不是因为只找到具有正确顺序的maches子文档,而是python dicts只是以任意顺序插入子文档。在</p>
<p>请看下面的答案如何使用有序dict来克服这个问题:<a href="https://stackoverflow.com/a/30787769/4273834">https://stackoverflow.com/a/30787769/4273834</a></p>