Câu hỏi và câu trả lời trên đã khá cũ. Nhưng dù sao, nếu ai đó ghé thăm trang này, tôi cảm thấy mình nên thêm:
Câu trả lời này hoàn toàn sai. Trên thực tế, trong Mongo Documents LÀ các cặp khóa-giá trị được sắp xếp theo thứ tự. Tuy nhiên khi sử dụng pymongo, nó sẽ sử dụng python dict cho các tài liệu thực sự không được sắp xếp theo thứ tự (kể từ cpython 3.6, dicts python vẫn giữ thứ tự, tuy nhiên đây được coi là chi tiết triển khai). Nhưng đây là một hạn chế của trình điều khiển pymongo.
Cần biết rằng hạn chế này thực sự ảnh hưởng đến khả năng sử dụng. Nếu bạn truy vấn db cho một tài liệu con, nó sẽ chỉ khớp nếu thứ tự của các cặp khóa-giá trị là chính xác.
Chỉ cần tự thử mã sau:
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())
Mỗi khi mã này được thực thi, tài liệu 'giống nhau' sẽ được thêm vào bộ sưu tập. Do đó, mỗi khi chúng tôi chạy đoạn mã này, giá trị được in 'phải' tăng lên một. Nó không phải bởi vì chỉ tìm thấy các subocuemnts của maches với thứ tự chính xác mà python chỉ chèn suboc theo thứ tự tùy ý.
xem câu trả lời sau đây về cách sử dụng dict có thứ tự để khắc phục điều này:https://stackoverflow.com/a/30787769/4273834