V manuálu bývala část, která explicitně uváděla, že DBRef není podporován v rámci agregačního rámce, spolu s různými dalšími typy BSON.
Stará pasáž zní tak, jak je uvedeno v tomto archivu skupin google zpráva:
Možná to tam ještě někde je, ale teď to nemůžu najít :)
V tomto vláknu zprávy je také zmíněno, že kromě toho, že to není podporováno v agregačním rámci, pak vaší další možností (a jedinou skutečnou možností pro agregaci) je použít mapReduce místo toho. Jako příklad shellu:
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 } }
)
Nevypadá to tak hezky kvůli libovolnému { "_id": "", "value": { } }
struktura výsledků mapReduce, ale umožňuje druh agregace, který hledáte.
Je zde také odkaz na toto vydání JIRA:SERVER-14466 , ale na této frontě bych moc pohybu nevydržel.
Takže můžete použít mapReduce, ale bylo by doporučeno přestat používat DBRef a definovat alternativní formu „ručních odkazů“, buď vkládáním informací o „sbírce“ a „databázi“, nebo spoléháním se na externí definici takových věcí ve schématu vaší aplikace, v závislosti na na vašich potřebách. Pokud se budete řídit stejnými pravidly, můžete agregační rámec použít pro cokoli s platnými názvy vlastností.