Vroeger was er een sectie in de handleiding waarin expliciet werd vermeld dat DBref niet wordt ondersteund door het aggregatieraamwerk, samen met verschillende andere BSON-typen.
De oude passage wordt gelezen zoals weergegeven in dit archief van Google-groepen bericht:
Het kan er nog ergens zijn, maar ik kan het nu gewoon niet vinden :)
Ook zoals vermeld in die berichtenthread is dat behalve dat dit niet wordt ondersteund in het aggregatieraamwerk, je andere optie (en enige echte optie voor aggregatie) is om de mapReduce methode in plaats daarvan. Als shell-voorbeeld:
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 } }
)
Het ziet er niet zo mooi uit vanwege de willekeurige { "_id": "", "value": { } }
structuur van mapReduce-resultaten, maar het laat wel het soort aggregatie toe waarnaar u op zoek bent.
Er is ook een verwijzing naar dit JIRA-probleem:SERVER-14466 , maar ik zou niet veel beweging op dat front uithouden.
U kunt dus mapReduce gebruiken, maar het is aan te raden om af te stappen van het gebruik van DBRef en een alternatieve vorm van "handmatige verwijzingen" te definiëren, ofwel door "verzameling" en "database" in te bedden of te vertrouwen op een externe definitie van dergelijke dingen in uw toepassingsschema, afhankelijk van op uw behoeften. Zolang u daar dezelfde regels volgt, kunt u het aggregatieraamwerk gebruiken voor alles met geldige eigenschapsnamen.