2

次のドキュメントをmongoに保存すると、次のようになります。

{
name: Somename,
profile: Someprofile
}

find_one() を使用する場合:

次のような結果が得られます。

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

次のように順序付けられたjson文字列で結果を取得できるように、find_oneの前または後に何かを行うときに、Pythonに何らかの方法がありますか?

{
_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

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 に答える
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 に答える