-1


pymongo ドライバーを使用して、python フレームワーク Flask と MongoDB で webapp を作成しようとしています。
オンラインでデータを編集できるようにするには、管理者ビューを取得する必要があります。

コレクションの構造:

db.skills.insert({ "rubric": rubric, "head": title, "body": content })

(値が < 0 の場合、各フィールドは $unset にすることができます)

コントローラーで、 dict のリストを作成してデータをビューに送信します。

def skList():
    liste, keys, value = [], [], []
# iterate over the collection to get 2 list of all keys and values.
    for row in db.skills.find():
        keys.append(row.keys())
        value.append(row.values())
# merge the 2 lists.
    zipped = zip(keys, value)
# finally create a list of dict containing each row of my db
    for x, y in zipped:
        liste.append(dict(zip(x, y)))
    return liste

結果は次のようになります。

liste = [ {_id:ObjectId('89878979879'), 'rubric':'Python', 'body': 'truc'}, {_id:ObjectId('876876899'), 'rubric':'chose', 'head':'blabla', 'body':'foo'} ]

私の見解では、反復処理を行ったところ、正常に表示されました!
また、各フィールドを編集/削除したり、ドキュメントをドロップしたりできます。

ビューからデータを追加し始めたときに問題が発生しました:

ビューから追加された次のドキュメントがコレクションの途中に挿入されることがあるため、順序が固定されず、
同じものが mongo シェルから追加されます。

ここで説明を見つけました:
https://groups.google.com/d/msg/mongodb-user/B5jU0uyGhh8/i3LacXcXKDwJ

したがって、ドキュメントがビューによって表示されないようにする必要があり、これを行う方法がわかりません:p

誰かが解決策を提案できますが、おそらく別のパターンを使用する必要がありますか?

4

1 に答える 1

0

コレクション Mongo を反復処理し、各ドキュメントの「インデックス」フィールドで並べ替えられた辞書のリストを返すためのソリューションがあります。

def collecList(collection):
    liste, keys, value = [], [], []
    for row in collection.find().sort("index"):
        keys.append(row.keys())
        value.append(row.values())
    zipped = zip(keys, value)
    for x, y in zipped:
         liste.append(dict(zip(x, y)))
    return liste
于 2013-11-13T19:05:12.803 に答える