Хотя это не имеет ничего общего с PHP, я использую PHP в следующих примерах.
Допустим, это «нормальный» способ ограничения результатов.
$db->users->find()->limit(10);
ЭтоВозможно, это самый быстрый способ, но здесь есть некоторые ограничения ... В следующем примере я отфильтрую все строки, в которых значение сохранения для определенного столбца равно предыдущему:
$cursor = $db->users->find();
$prev = null;
$results = array();
foreach ($cursor as $row) {
if ($row['coll'] != $prev['coll']) {
$results[] = $row;
$prev = $row;
}
}
Но вы все равно хотите ограничить результаты до 10, конечно.Таким образом, вы можете использовать следующее:
$cursor = $db->users->find();
$prev = null;
$results = array();
foreach ($cursor as $row) {
if ($row['coll'] != $prev['coll']) {
$results[] = $row;
if (count($results) == 10) break;
$prev = $row;
}
}
Объяснение: поскольку $cursor
на самом деле не загружает результаты из базы данных, break
в foreach
-loop будет limit
так жеlimit(...)
-функция работает.
Просто точно, действительно ли это работает, как я говорю, или есть какие-то проблемы с производительностью, о которых я не знаю?
Спасибо большоемного, Тим