MongoDB 3.4多个查找操作

时间:2017-03-30 15:07:25

标签: mongodb

是否可以在对mongo服务器的单个网络请求中执行多个查询(查找操作)?与ElasticSearch(msearch)类似。

谢谢!

1 个答案:

答案 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方法的需求,这些方法允许我们减少所需的查询数量。我还没有遇到另一种情况,我认为批量阅读会解决我的问题。