Вы не можете «пропустить» в зависимости от размера коллекции, потому что она не будет учитывать условия запроса.
Правильным решением является сортировка от желаемой конечной точки, ограничение размера набора результатов, а затем корректировка порядка результатов при необходимости.
Вот пример, основанный на реальном коде.
var query = collection.find( { conditions } ).sort({$natural : -1}).limit(N);
query.exec(function(err, results) {
if (err) {
}
else if (results.length == 0) {
}
else {
results.reverse(); // put the results into the desired order
results.forEach(function(result) {
// do something with each result
});
}
});
Не похоже, что есть способ отсортировать данные внутри итератора.
Вы можете поместить отображаемые данные в промежуточный массив с ключом желаемого значения для сортировки и вызовите ksort () для массива. Однако это займет два прохода по данным.
$path = ".";
$files = new DirectoryIterator($path);
$files_array = array();
while($files->valid()) {
// sort key, ie. modified timestamp
$key = $files->getMTime();
$data = $files->getFilename();
$files_array[$key] = $data;
$files->next();
}
ksort($files_array);
foreach($files_array as $key => $file){
print $key . " => " . $file . "\n";
}
edit:
если вы поместите всю информацию, которую вы хотите вывести для файлов, в значения массива, вы можете просто после этого просто выполнить implode () массив вместо еще раз перебрать данные.
$files = new DirectoryIterator($path);
$i = 0;
$paths = array();
while($files->valid()) {
$paths[$i++] = $files->getFileName();
$files->next();
}
sort($paths)
Может быть то, что вы ищете, вы всегда можете, конечно, применить функцию сортировки для сортировки путей в зависимости от ваших предпочтений после этого.