Защо обобщеният изход не се връща като DBCursor или списък?
Рамката за агрегиране е създадена за решаване на лесни проблеми, които иначе биха изисквали намаляване на картата.
Тази рамка обикновено се използва за изчисляване на данни, които изискват пълния db като вход и няколко документа като изход.
Каква е разликата между оператора $match, използван вътре в агрегатната функция, и редовното намиране в Mongodb?
Една от разликите, както казахте, е типът връщане. Намерете изхода на операциите като DBCursor .
Други разлики:
- Резултатът от агрегирането трябва да е под 16 МБ. Ако използвате фрагменти, пълните данни трябва да бъдат събрани в една точка след първата $group или $sort .
- $match единствената цел е да се подобри мощността на агрегирането, но има някои други приложения, като подобряване на производителността на агрегиране.
а също и защо не можем да преброим върнатите документи?
Можеш. Просто пребройте броя на елементите в получения масив или добавете следната команда в края на тръбата:
{$group: {_id: null, count: {$sum: 1}}}
Защо функцията find не позволява преименуване на имената на полета като обобщаващата функция?
MongoDB е млад и функциите все още идват. Може би в бъдеща версия ще успеем да направим това. Преименуването на полета е по-критично при агрегирането отколкото в намери .
РЕДАКТИРАНЕ (26/02/2014):
Операциите за агрегиране на MongoDB 2.6 ще върнат курсор.
РЕДАКТИРАНЕ (2014/04/09):
MongoDB 2.6 беше пуснат с предвидените промени в агрегирането.