Ответ 1
Почему итоговый результат не возвращается как DBCursor или List?
Структура агрегации была создана для решения простых задач, которые в противном случае потребовали бы уменьшения карты.
Эта структура обычно используется для вычисления данных, требующих полного ввода-вывода в качестве входных данных и нескольких документов в качестве вывода.
В чем разница между оператором $match, используемым внутри агрегированной функции, и регулярной находкой в Mongodb?
Одно из отличий, как вы заявили, - это тип возврата. Вывод выходных данных операции в качестве DBCursor.
Другие отличия:
- Результат агрегирования должен быть до 16 МБ. Если вы используете shards, то полные данные должны быть собраны в одной точке после первого $group или $sort.
- $совпадение только для повышения эффективности агрегации, но у него есть некоторые другие виды использования, такие как улучшение производительности агрегации.
а также почему мы не можем получить количество возвращаемых документов?
Вы можете. Просто подсчитайте количество элементов в результирующем массиве или добавьте следующую команду в конец канала:
{$group: {_id: null, count: {$sum: 1}}}
Почему функция find не позволяет переименовывать имена полей, такие как агрегатная функция?
MongoDB молод, и функции все еще идут. Возможно, в будущей версии мы сможем это сделать. Переименование полей является более важным в агрегации, чем в поиске.
EDIT (2014/02/26):
Операции агрегации MongoDB 2.6 вернут курсор.
EDIT (2014/04/09):
MongoDB 2.6 был выпущен с прогнозируемыми изменениями агрегации.