修改属性在MongoDB中的显示顺序

Muh*_*qar 4 python mongodb pymongo

我正在使用PyMongo将数据(title, description, phone_number ...)插入MongoDB。但是,当我使用mongo客户端查看数据时,它以奇怪的顺序显示属性。具体而言,phone_number属性被首先显示,然后title再谈到description。有什么方法可以强制执行特定命令?

squ*_*773 5

上面的问题和答案已经很老了。无论如何,如果有人来访,我觉得我应该补充:

这个答案是完全错误的。实际上,在Mongo Documents中都是有序键值对。但是,当使用pymongo时,它将对确实没有排序的文档使用python dict(从cpython 3.6开始,python dict保留顺序,但是这被视为实现细节)。但这是pymongo驱动程序的限制。

请注意,此限制实际上会影响可用性。如果在数据库中查询子文档,则只有在键值对的顺序正确的情况下才匹配。

只需自己尝试以下代码:

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())
Run Code Online (Sandbox Code Playgroud)

每次执行此代码时,都会将“相同”文档添加到集合中。因此,每次我们运行此代码段时,打印值“应该”增加一。这不是因为仅查找具有正确顺序的机器子文档,而python dicts才以任意顺序插入子文档。

请参阅以下答案,如何使用有序字典来克服此问题:https : //stackoverflow.com/a/30787769/4273834


归档时间:

查看次数:

2426 次

最近记录:

8 年,8 月 前