2

当我将以下文档存储到 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)

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

4

2 回答 2

0

与@Mike Steder 的回答基本相同,但可能不那么花哨且更清晰:

import json
from collections import OrderedDict

theordereddict = OrderedDict()
d = data_layer.find_one()
for k in sorted(d.keys()):
    theordereddict[k] = d[k]

json.dumps(theordereddict)
于 2012-08-14T21:53:42.833 回答
0

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)]) + "}"
于 2012-08-14T21:20:01.287 回答