2017-11-02 14 views
0

複数のpymongo Cursorをどのように連結しますか?それが不可能ではない場合、複数のCursorからどのように結果を得て新しいものを作成しますか?pymongoカーソルを連結する

例:

result1 = db[collection].find(query1) 
result2 = db[collection].find(query2) 
concat_result = result1 + result2 #something like that. 

更新: ここにすべての答えは、クエリが同じ形式であることを考慮に入れているようです。例えば。 query1は、query2がカテゴリ別にドキュメントをソートし、5のカウントで制限される可能性があるため、日付の間に2つのドキュメントを取得する可能性があります。$orは、これらの2つのクエリをconcateningした後、私はそれらを別のキーで並べ替える必要があります。

詳細については、クラスPrinterpymongo.Cursorを受け取る必要がありますが、私はこれに固執しています。

+0

号しかし、あなたはおそらく[ '$ or'](HTTPSへの引数として各クエリを発行することを意味://docs.mongodb。 com/manual/reference/operator/query /または/)を使用します。したがって、.find({"$ or":[{"a":1}、{"b":2}}}) 'は、それぞれの条件に対して2つのクエリを実行するのと同じです。 –

答えて

1

最も簡単な方法は、あなたがpythonでこれを行うには持っている場合、または

def concat_results(*results): 
    ids = set() 
    for result in results: 
     for v in result: 
      if v['_id'] not in ids: 
       ids.add(v['_id']) 
       yield v1 
concat_result = list(concat_results(result1, result2)) 
0

はい賢明な解決策は、$を使用することです

db[collection].find({'$or': [query1, query2]}) 

ようモンゴ$または演算子を使用することですまたは上記のように。 あなたは、あなたは可能性が神託の方法でそうしたい場合:

a = [item for item in db[collection].find({filters},{select_fields})] 
b = [item for item in db[collection].find({filters},{select_fields})] 
c = [] 
for x,y in zip(a,b): 
     c += [x, y] 
関連する問題