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

标签 python mongodb pymongo

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

最佳答案

上面的问答已经很老了。无论如何,如果有人访问这里,我觉得我应该添加:

这个答案是完全错误的。实际上在 Mongo 文档中是有序的键值对。但是,当使用 pymongo 时,它将对确实未排序的文档使用 python 字典(从 cpython 3.6 开始,python 字典保留顺序,但这被认为是一个实现细节)。但这是 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())

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

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

关于python - 修改属性在MongoDB中的显示顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16348042/

相关文章:

python - 为什么 pymongo 在对不同对象使用 insert_one 时会生成重复的 _id 值?

python - 使用 pymongo 向 mongoDB 中插入数据

mongodb - 不指定所有参数的更新插入

python - 如何找到文件中的所有数字条目

python - Sublime Text 2 和 PYTHONPATH

MongoDB 聚合 - $project 和 $cond

node.js - 想在mongodb node.JS中通过_id获取引用集合的对象

java - 引用的延迟加载

python - Python无法打开JSON文件,给出JSONDecodeError

python - PyCharm:函数参数的正则表达式字符串意图