Я ищу для решения следующих:Как вернуть позицию документа, относительно сбора в MongoDB (масштабируемый)
У меня есть сортируемая, постраничного стол, представляющий коллекцию в MongoDB
для того, чтобы первые результаты и на каждой странице я использую следующие
var defaultRows = 10;
var defaultPage = 1;
var defaultSort = ['name'];
var page = defaultPage - 1;
var totalPages = Math.ceil(db.table.count()/defaultRows);
var results = db.table.find().skip(page * defaultRows).limit(defaultRows).sort(defaultSort);
Так что я искал решения для поиска документа и возвращает точную страницу этого документа в соответствии с переменной сортировки.
Я придумал это, но он не очень хорошо масштабируется в больших коллекциях.
var counter = 0;
var page = 1;
var queryName = 'smth';
db.table.find().sort(defaultSort).forEach(function (doc) {
if (doc.name === query.Name) return false;
counter++;
if (counter === 10) { counter = 0; page++ };
});
print page; // Here page will give me the correct page
Но если у меня есть большой стол, это не было бы неправильно, чтобы разобрать все это через Foreach и загрузить его в коллекции? Есть ли более простой способ сделать это, что является более масштабируемым.
* Конечно, это оригинальный скрипт javascript для mongo, я использую mongoosedb как драйвер node.js, но он очень похож на этот!
Документ MongoDB не имеет позиции относительно коллекции. В этом отношении Mongo очень похож на традиционный SQL-сервер. Например, в зависимости от того, была ли вы сортировка по имени или возрасту, данный документ может одновременно быть первым и последним документом в коллекции. Что вы пытаетесь достичь? –
Я пытаюсь определить положение документа в соответствии с данным запросом в возвращаемом массиве коллекции, не используя forEach. Вот и все. Но, похоже, нет другого пути, кроме этого! – drinchev
Но почему вы пытаетесь определить положение документа внутри коллекции в соответствии с запросом? –