0
我有一组带有external-id
字段的文档,已编制索引。我有一个来自外部的ID流,我想查找所有与数据库中的文档相匹配的ID。我不关心数据库中的任何字段,只是匹配的ID。这些进来的速度很快,所以效率很重要。查询Mongo索引中是否存在序列id索引值的最有效方法?
在情况下,它会影响启发,我猜,实际上做匹配的比例会非常低。
解决方案1,做一个接一个:
for x in external-ids-stream:
c = db.documents.count({"external-id": x})
if c > 0:
yield x
(对不起的伪代码)
不通过网络发送的数据太多,但可能有一个很大的开销每个请求。
溶液2,块输入,$与投影
for xs-chunk in chunks(external-ids-stream):
docs = db.documents.find({"external-id": {"$in": xs-chunk}}, {"external-id"})
for doc in docs:
yield doc.xs-chunk
符成块,这可能减少了开销。
我猜#2是最好的两个,但鉴于我试图实现一个非常具体的操作,即交叉的价值流与指数,我不知道是否有一个更具体的和有效的方法来做到这一点?
谢谢!我没有想过使用findOne。我会尝试一下。 – Joe
我比较了两种方法,2000个查询(打到一半,一半未命中)在10批次,和'$ in'约为4.5倍速度更快。 – Joe