Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修改属性在MongoDB中的显示顺序_Python_Mongodb_Pymongo - Fatal编程技术网

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

Python 修改属性在MongoDB中的显示顺序,python,mongodb,pymongo,Python,Mongodb,Pymongo,我正在使用PyMongo将数据(标题、说明、电话号码…插入MongoDB。但是,当我使用mongoclient查看数据时,它会以奇怪的顺序显示属性。具体来说,首先显示电话号码属性,然后显示标题,然后显示说明。有什么方法可以强制执行特定订单吗?原始答案(2013): MongoDB文档是BSON对象,是键-值对的无序字典。因此,您不能依赖或设置特定的字段顺序。您唯一可以操作的是显示哪些字段,不显示哪些字段,请参见find参数上的文档 另见有关SO的相关问题: 希望能有所帮助。以上问题和答

我正在使用PyMongo将数据
(标题、说明、电话号码…
插入MongoDB。但是,当我使用
mongo
client查看数据时,它会以奇怪的顺序显示属性。具体来说,首先显示
电话号码
属性,然后显示
标题
,然后显示
说明
。有什么方法可以强制执行特定订单吗?

原始答案(2013):

MongoDB文档是BSON对象,是键-值对的无序字典。因此,您不能依赖或设置特定的字段顺序。您唯一可以操作的是显示哪些字段,不显示哪些字段,请参见find参数上的文档

另见有关SO的相关问题:


希望能有所帮助。

以上问题和答案都很老了。无论如何,如果有人访问此网站,我觉得我应该补充:

这个答案是完全错误的。实际上,在Mongo中,文档是有序的键值对。然而,当使用pymongo时,它将使用python dicts来处理确实没有顺序的文档(从cpython 3.6开始,python dicts保留顺序,但这被视为一个实现细节)。但这是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。这并不是因为只找到具有正确顺序的maches子文档,而是python dicts只是以任意顺序插入子文档


参见下面的答案:如何使用有序的DICT来克服这个问题:

请再次考虑这个答案——如@ Stoto733所指出的。