是否可以在对mongo服务器的单个网络请求中执行多个查询(查找操作)?与ElasticSearch(msearch)类似。
谢谢!
答案 0 :(得分:0)
这是一个模糊的问题,但我之前遇到过类似的问题。
简而言之,在某种情况下,查询集合中的值列表并返回一个布尔值,以确定是否可以在某个键中找到该值。
e.g。
{'Name': 'Bob', 'Age': 32}
{'Name': 'Angie', 'Age': 27}
{'Name': 'Billy', 'Age': 12}
PyMongo中的所需行为:
names = ['Bob', 'James']
finds = [Find({'Name': name}) for name in names]
db.coll.bulk_find(finds)
[True, False]
真实世界的例子:
我有一个包含从不同来源收集的数据的数据库。随着新数据的出现,有时这些数据是重复的,因此是不必要的。为了避免收集,清理和更新现有数据的开销,我们决定迭代源并检查集合中是否存在每个源。如果没有,则将其附加到列表中,然后将其用于收集,清理,更新阶段。
显然,随着来源增加,collection.find()
的呼叫次数也会增加。这是一个问题,我们通过collection.distinct()
调用解决了这个问题。
原始方法:
new_sources = []
for source in sources:
if not db.coll.findOne({'Source': source}):
new_sources.append(source)
修改方法:
existing_sources = set(db.coll.distinct('Source'))
new_sources = set(sources).difference(existing_sources)
最后,我们通过利用其他收集方法来满足对bulk_read
方法的需求,这些方法允许我们减少所需的查询数量。我还没有遇到另一种情况,我认为批量阅读会解决我的问题。