1

私は構造を持っています

locations : { //info,
             "events" :[ { //data
                          "displayed" : True},
                          { //data
                          "displayed" : False}
                       ]
             }

各場所には、イベントを表示するかどうかを定義する多くのイベントがあります。

私のpythonコード:

#load the data
locations = db.col.find({'events.displayed': True})
#remove manually
for l in locations:
    for e in l['events']:
        if e['displayed'] == False:
            #this item should be deleted
            print e

a のみが true で、アイテム全体が返さ{'events.displayed': True}れる場合に満足できることを私は知っています。events.displayed

find()の付いたアイテムを通話で無視できるかどうかを尋ねたいです"displayed" : False。pymongoでそれが起こらない場合は"displayed" : False、最適化された(二重ループのため)方法でpythonを使用して手動でアイテムを削除したい(おそらくitertoolsライブラリで何か?)。

4

2 に答える 2

0

"displayed": TrueMongoDB のAggregation Frameworkを使用すると、それらの項目のみを取得できます。これがサンプルコードです。

db.locations.aggregate([{'$unwind': '$events'}, {'$match': {'events.displayed': True}}])

Python コードでこれらの要素をフィルタリングするdb.locations.find必要があります。

于 2013-10-31T01:43:23.777 に答える
0

プロジェクション」を使用して、配列の一致する部分のみを送信するようにサーバーに指示します。

for doc in locations.find(
        {'events.displayed': True},
        {'events': {'$elemMatch': {'displayed': True}}}):
    print doc

これは、最初に一致した配列要素のみを返すことに注意してください。一致するすべての要素が必要な場合は、Python ループが最適な方法です。

于 2013-11-05T17:17:00.600 に答える