连接pymongo光标

时间:2017-11-02 12:17:00

标签: mongodb concatenation pymongo

如何连接多个pymongo Cursor?如果没有,那么如何从多个Cursor中获取结果并创建一个新的?

示例:

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

更新: 这里的所有答案似乎都考虑到查询的格式相同。例如。 query1可能会在日期之间获得2个文档,因为query2可能会按类别对文档进行排序,并且可能会受到5的限制。$or对于我需要的内容来说过于同质。在连接这两个查询之后,我需要根据另一个键对它们进行排序。

有关详细信息,班级Printer需要收到pymongo.Cursor且只有一个,而且我对此感到困惑。

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用mongo $或类似

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

或者如果你必须在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))

答案 1 :(得分:0)

是的,明智的解决方案是使用$或如上所述。 如果你想以pythonic方式这样做,那么你可以:

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]