连锁两个Pymongo游标

时间:2013-07-29 17:04:54

标签: python mongodb pymongo

是否有可能将两个Pymongo游标链接在一起?它们似乎与生成器相似,我想象可能只使用itertools来链接它们,但遗憾的是它不起作用。另外,我尝试使用其他返回的union选项,但光标对象不存在。

当我在游标对象上调用dir时,我看到的最有希望的是add_option,但这似乎是针对不同的东西。

可以通过将每个mongo对象添加到列表并迭代它来实现这样的事情,但由于很多原因这似乎是一个糟糕的选择,所以我想知道是否有一些内置功能为此或更优雅的黑客。有什么想法吗?

一般不工作代码:

        prod_cursor = self.prod_index.find_modules_by_category("fakeqwerty")  # empty generators
        edge_cursor = self.edge_index.find_modules_by_category("fakeqwerty")
        for k, v in kwargs["queries"].items():
            prod_function = getattr(self.prod_index, k)
            itertools.chain(prod_cursor, prod_function(*v))
            edge_function = getattr(self.edge_index, k)
            itertools.chain(edge_cursor, edge_function(*v))

edge和prod函数的结果都是游标。

更新

为了清楚起见,我希望结果保持游标而不是强制转换为功能较少的类型,因为我在代码库中的其他地方使用了count等函数。

1 个答案:

答案 0 :(得分:3)

此代码有效:

>>> from pymongo import MongoClient
>>> from itertools import chain

>>> mc = MongoClient()
>>> db = mc["test_db"]
>>> col = db["test_collection"]

>>> col.insert({"aaaa":1})
>>> col.insert({"bbbb":2})

>>> cur1 = col.find({"aaaa":1})
>>> cur2 = col.find({"bbbb":2})

>>> data = [x for x in chain(cur1, cur2)]
>>> data
[{u'aaaa': 1, u'_id': ObjectId('51f6a2ef0fef4e0daccc50e1')}, {u'_id': ObjectId('51f6a2fb0fef4e0daccc50e2'), u'bbbb': 2}]