当我将以下文档存储到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)
如何在属性方面以正确的顺序获取输出字符串?在我将文档插入数据库之前,此命令是否由其他内容决定?
答案 0 :(得分: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)
没有为您提供所需的输出。我认为您需要手动构建已排序的字符串表示。 E.g:
s = "{" + ",".join(["%s:%s" for k,v in sorted(d.items(), key=key_function)]) + "}"
答案 1 :(得分: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)