mongodb - наиболее эффективный способ расчета недостающих индексов в последовательности - PullRequest
1 голос
/ 05 марта 2019

Для данной коллекции, скажем, 1.000.000 записей, каждая из которых имеет свое уникальное свойство, называемое номером, которое индексируется. Как эффективно найти самый низкий разрыв в числовой последовательности.

Простым примером была бы последовательность индексов, таких как: 1,2,3,4,6,7,10, где я хотел бы вернуть число 5, так как это будет самое низкое пропущенное число в последовательности.

Есть ли возможный способ (возможно, агрегация) без необходимости запрашивать все числа.

1 Ответ

0 голосов
/ 05 марта 2019

Один из способов сделать это - курсор .С помощью курсора вы можете вручную перебирать документы, пока не найдете тот, который соответствует вашим критериям.

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;
}
...