【发布时间】:2013-07-29 14:12:58
【问题描述】:
是否可以将两个 Pymongo 光标链接在一起?它们看起来与生成器足够相似,我想可能只使用使用 itertools 来链接它们,但遗憾的是这不起作用。此外,我尝试将 union 选项用于其他返回,但光标对象不存在。
当我在光标对象上调用 dir 时,我看到的最有希望的是 add_option,但这似乎是针对不同的东西。
可以通过将每个 mongo 对象添加到列表并遍历它来实现类似的东西,但是由于很多原因,这似乎是一个糟糕的选择,所以我想知道是否有一些内置的为此功能或更优雅的hack。有什么想法吗?
一般不工作的代码:
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 之类的函数。
【问题讨论】:
-
itertools.chain当然应该工作。当你尝试它时,什么“不起作用”,你使用了什么代码? -
@kindall 使用 itertools.chain 将其转换为生成器,这导致光标丢失了光标所具有的许多方法,例如我在应用程序中其他地方需要的计数。
-
itertools.chain用于迭代可迭代链;它没有太多其他用途,您通常会直接在“for”语句中使用它。但是创建自己的类来做到这一点很容易。实际上,可能会为提交到项目提供一个不错的补丁。 -
@kindall 好建议。实际上,我可能会开始对此进行破解,尽管理想情况下我正在寻找更多快速解决此问题的方法,但为子孙后代咬紧牙关可能会更好。