Sla*_*off 2 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))
Run Code Online (Sandbox Code Playgroud)
其中edge和prod函数的结果都是游标。
更新:
为了清楚起见,我希望结果保留为光标,而不是在我的代码库中其他地方使用 count 等函数时将其转换为功能不太丰富的类型。
这段代码有效:
>>> 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}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2343 次 |
| 最近记录: |