Преди имаше раздел в ръководството, в който изрично се посочваше, че DBRef не се поддържа от рамката за агрегиране, заедно с различни други типове BSON.
Старият пасаж гласи, както е показано в този архив на групите в Google съобщение:
Може все още да е там някъде, но просто не мога да го намеря в момента :)
Освен това, както се споменава в тази нишка със съобщения, освен че това не се поддържа в рамката за агрегиране, другата ви опция (и единствената реална опция за агрегиране) е да използвате mapReduce метод вместо това. Като пример за обвивка:
db.Products.mapReduce(
function() {
emit( this.model.$id, { "actives": [this.isActive] } );
},
function(key,values) {
var result = { "actives": [] };
values.forEach(function(value) {
value.actives.forEach(function(active) {
result.actives.push( active );
});
});
},
{ "out": { "inline": 1 } }
)
Не изглежда толкова добре поради произволния { "_id": "", "value": { } }
структура на резултатите от mapReduce, но позволява вида агрегиране, който търсите.
Има и препратка към този проблем на JIRA:SERVER-14466 , но не бих издържал много движение на този фронт.
Така че можете да използвате mapReduce, но би било препоръчително да се отдалечите от използването на DBRef и да дефинирате алтернативна форма на „ръчни препратки“, или вграждайки информация за „колекция“ и „база данни“, или разчитайки на външна дефиниция на такива неща в схемата на вашето приложение, в зависимост на вашите нужди. Докато следвате същите правила там, можете да използвате рамката за агрегиране за всичко с валидни имена на свойства.