Я не думаю, что это возможно в одном запросе, чтобы получить общее количество результата вместе с страничных данных без используя агрегацию.
Возможно, вы можете достичь этого посредством агрегации, но, поскольку вы упомянули, ваша коллекция очень велика, вам следует избегать ее и разбить запрос на две части. Я обеспечиваю вам пример рассмотрения user
коллекции, имеющей rating
поле с более чем 10000 записей:
var finalResult = {};
var query = {
rating: {$gt: 2}
};
// Get first 50 records of users having rating greater than 2
var users = db.user.find(query).limit(50).skip(0).toArray();
// Get total count of users having rating greater than 2
var totalUsers = db.user.cound(query);
finalResult.count = totalUsers;
finalResult.data = users;
И окончательного вывода может быть как:
finalResult == {
count: 1150,
data: [/*length of 50 users*/]
}
Надежда, это имеет смысл для вас , Некоторые из известных технологий, таких как Grails, делают это для достижения разбивки на страницы.
Другой очиститель подход может быть:
var finalResult = {};
var query = {
rating: {$gt: 2}
};
var cursor = db.user.find(query).limit(50).skip(0);
// Get total count of users having rating greater than 2
// By default, the count() method ignores the effects of the cursor.skip() and cursor.limit()
finalResult.count = cursor.count();;
finalResult.data = cursor.toArray();
Возможный дубликат (HTTP [Ограничение результатов в MongoDB, но по-прежнему получать полный анализ?]://stackoverflow.com/questions/15300882/limiting-results-in-mongodb-but-still-getting-the-full-count) – Shanoor