Skip to main content
 首页 » 编程设计

python之使用 pymongo 从 mongodb 检索文档时的有序属性

2025年05月04日8dyllove98

当我将以下文档存储到 mongo 中时,类似于:

{ 
name: Somename, 
profile: Someprofile 
} 

当我使用 find_one() 时:

我得到类似这样的结果:

{ 
profile: Someprofile, 
_id: 35353432326532(random mongo id), 
name: Somename 
} 

在 python 中有什么方法可以让我在 find_one 之前或之后做一些事情,这样我就可以得到一个 json 字符串的结果,其顺序如下:

{ 
_id: 35353432326532(random mongo id), 
name: Somename, 
profile: Someprofile 
} 

我尝试使用如下所示的 OrderedDict,但它似乎没有帮助。

somedocument = db.mycollection 
theordereddict = OrderedDict(data_layer.find_one()) 
print str(theordereddict) 

如何获得关于属性的正确顺序的输出字符串?在我将文档插入数据库之前,这个顺序是由其他东西决定的吗?

请您参考如下方法:

collections.OrderedDict 不会对键进行排序,它只是保留顺序,您需要按照要检索它们的顺序将键插入其中。

d = data_layer.find_one() 
def key_function(tuple): 
    """This defines the sort order for the sorted builtin""" 
    return tuple[0] 
sorted_dict = collections.OrderedDict((k,v) for k, v in sorted(d.items(), 
                                                               key=key_function))      

也就是说,看起来 print str(sorted_dict) 没有给您想要的输出。我认为您需要手动构建已排序的字符串表示形式。例如:

s = "{" + ",".join(["%s:%s" for k,v in sorted(d.items(), key=key_function)]) + "}"