查询Mongo索引中是否存在序列id索引值的最有效方法?

时间:2017-04-25 14:46:38

标签: mongodb

我有一组带有external-id字段的文档,该字段已编入索引。我有来自外部的ID流,我想找到与数据库中的文档匹配的所有ID。我不关心数据库中的任何字段,只关心匹配的ID。这些进入的速度很快,因此效率很重要。

如果它影响启发式,我猜测实际匹配的比例会非常低。

解决方案1,逐个进行:

for x in external-ids-stream:
  c = db.documents.count({"external-id": x})
  if c > 0:
    yield x

(请原谅伪代码。)

不会通过线路发送太多数据,但每次请求可能会产生大量开销。

解决方案2,块输入,$ in with projection

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是两者中最好的,但考虑到我正在尝试实现一个非常具体的操作,即一个值与一个索引的交叉,我想知道是否有一个更具体和有效这样做的方法?

1 个答案:

答案 0 :(得分:0)

如果您不关心文件数量 - 请不要计算,但findOne

Comment.joins(:likes)
  .select('comments.*, count(likes) as like_count')
  .group('comments.id')
  .order('like_count desc')

如果需要,请确保索引适合内存,分片。

没有太多开销,因为驱动程序在池中保持连接打开,另一方面,您可以从异步请求中受益,并行处理流。