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