mongodb - 按顺序计算缺失索引的最有效方法

Posted

技术标签:

【中文标题】mongodb - 按顺序计算缺失索引的最有效方法【英文标题】:mongodb - most efficient way of calculating missing indices in sequence 【发布时间】:2019-07-27 02:28:43 【问题描述】:

给定一个包含 1.000.000 个条目的集合,并且每个条目都有自己的唯一属性,称为编号,该属性被索引。如何有效地找到数列中的最小间隙。

一个简单的例子是一个索引序列,例如:1,2,3,4,6,7,10,我想在其中取回数字 5,因为这将是序列中缺失的最小数字。

有没有一种可能的方式(可能是聚合)而不需要查询所有的数字。

【问题讨论】:

【参考方案1】:

一种方法是使用cursor。使用光标,您可以手动遍历文档,直到找到符合您的条件的文档。

var cursor = db.coll.find().sort(number: 1);
var prev = null
while (cusor.hasNext()) 
  var curr = cursor.getNext()
  if (prev && prev.number + 1 !== curr.number) break;
  prev = curr;

【讨论】:

遗憾的是,光标似乎只迭代了多达 20 次(文档指出了这一点)。我对此也有不好的感觉,因为游标函数不是通过 mongodb 执行的(它在我的节点应用程序上执行),这意味着我必须在每次检查时迭代/获取大量数据(多次迭代),这可能耗费大量时间 您可以使用 $projection 来限制您正在查看的数据量并在 shell 中运行它。 或者,如果您知道文档的最小、最大和数量,您应该能够编写应用端二进制搜索来快速找到该文档 我事先不知道最大值...你能解释一下 App Side binary search 是什么意思吗?我不需要所有的内存索引吗? 我明天必须研究 $projection,也许会有这种可能性,但预测听起来也像我必须在最后获取所有数据

以上是关于mongodb - 按顺序计算缺失索引的最有效方法的主要内容,如果未能解决你的问题,请参考以下文章

确保Java中顺序命令的最有效方法

在R中的排序向量中获取索引的最有效方法?

删除列表中前 N 个元素的最有效方法?

将 SDF 计算为三角形网格的最有效方法

存储数千个中型文档的最有效的面向文档的数据库引擎是啥?

在NodeJS中将许多文件中的JSON对象插入MongoDB的最有效方法