2024-05-16 08:35:28 发布
网友
我使用PyMongo将数据(title, description, phone_number ...)插入MongoDB。但是,当我使用mongo客户机查看数据时,它以奇怪的顺序显示属性。具体来说,首先显示phone_number属性,然后是title,然后是{}。有什么办法可以强制执行某个特定的命令吗?在
(title, description, phone_number ...)
mongo
phone_number
title
原始答案(2013):
MongoDB文档是BSON对象,是键-值对的无序字典。因此,您不能依赖或设置特定的字段顺序。您唯一可以操作的是显示哪些字段而哪些字段不显示,请参见find的projection参数上的文档。在
另请参见SO上的相关问题:
希望有帮助。在
上面的问题和答案都很古老。不管怎样,如果有人来参观我觉得我应该补充一下:
这个答案是完全错误的。实际上在Mongo中,文档是有序的键值对。但是,当使用pymongo时,它将使用python dicts来处理确实没有排序的文档(从cpython3.6开始,python dicts保持顺序,但是这被认为是实现细节)。但这是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。这并不是因为只找到具有正确顺序的maches子文档,而是python dicts只是以任意顺序插入子文档。在
请看下面的答案如何使用有序dict来克服这个问题:https://stackoverflow.com/a/30787769/4273834
原始答案(2013):
MongoDB文档是BSON对象,是键-值对的无序字典。因此,您不能依赖或设置特定的字段顺序。您唯一可以操作的是显示哪些字段而哪些字段不显示,请参见find的projection参数上的文档。在
另请参见SO上的相关问题:
希望有帮助。在
上面的问题和答案都很古老。不管怎样,如果有人来参观我觉得我应该补充一下:
这个答案是完全错误的。实际上在Mongo中,文档是有序的键值对。但是,当使用pymongo时,它将使用python dicts来处理确实没有排序的文档(从cpython3.6开始,python dicts保持顺序,但是这被认为是实现细节)。但这是pymongo驱动程序的一个限制。在
请注意,这个限制实际上会影响可用性。如果只有当查询的子键对的顺序匹配时,它才会更正。在
只需自己尝试以下代码:
每次执行此代码时,都会将“相同”文档添加到集合中。因此,每次运行此代码段时,打印的值“应该”增加1。这并不是因为只找到具有正确顺序的maches子文档,而是python dicts只是以任意顺序插入子文档。在
请看下面的答案如何使用有序dict来克服这个问题:https://stackoverflow.com/a/30787769/4273834
相关问题 更多 >
编程相关推荐