我有一个需要解决的问题。目前我的代码使用一个集合,我为一个构建集合创建了一个游标。它看起来像这样:
foreach($csvArray as $row) {
foreach($row as $key => $value) {
if(empty($value)) {
unset($key);
}
}
}
我使用的定义返回此值,以便我可以使用它访问信息。 我希望能够为此添加另一个集合,并将两个集合视为相同。
from pymongo import MongoClient
from itertools import chain
db = MongoClient('10.39.165.193', 27017)['mean-dev']
cursor = db.collection1.find().limit(10).sort('number', -1)
我尝试的是这个(但确实有效):
cursor2 = db.collection1.find().limit(10).sort('number', -1)
joinCursors = ... # Somehow join cursors
当我只是打印joinCursor时。我得到了我的数据库中的最后一件事,这不是我想要的。我想要的是同样的事情,因为我只返回cursor1,即:。所以我可以使用像计数这样的东西,例如:
joinCursor = [x for x in chain(cursor1, cursor2)]
答案 0 :(得分:0)
解决此问题的一种方法是编写自己的JoinedCursor
类,例如:
class JoinedCursor:
def __init__(self, db, collection1, collection2, limit=None, sort_on=None, order=1):
self.limit = limit
self.sort_on = sort_on
self.order = order
self.cursor1 = db[collection1].find()
self.cursor2 = db[collection2].find()
def __iter__(self):
for doc in self.cursor1.limit(self.limit).sort(self.sort_on, self.order):
yield doc
for doc in self.cursor2.limit(self.limit).sort(self.sort_on, self.order):
yield doc
def count(self):
return self.cursor1.count() + self.cursor2.count()
然后,您可以在两个集合上创建连接游标,如下所示:
db = pymongo.MongoClient()["test-join"]
joined_cursor = JoinedCursor(db, "collection1", "collection2", limit=10, sort_on="num", order=-1)
您可以使用for循环按顺序迭代这两个并调用count
方法:
for doc in joined_cursor:
print(doc)
print(joined_cursor.count())
这当然可以更广泛地采用两个或更多集合并应用查询等。