Auparavant, il y avait une section dans le manuel qui indiquait explicitement que DBRef n'est pas pris en charge dans le cadre d'agrégation, ainsi que divers autres types de BSON.
L'ancien passage se lisait comme indiqué dans cette archive des groupes Google messages :
Il est peut-être encore là quelque part, mais je n'arrive tout simplement pas à le trouver en ce moment :)
De plus, comme indiqué dans ce fil de discussion, en plus de ne pas être pris en charge dans le cadre d'agrégation, votre autre option (et la seule véritable option d'agrégation) consiste à utiliser le mapReduce méthode à la place. À titre d'exemple de shell :
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 } }
)
Cela n'a pas l'air aussi agréable à cause de l'arbitraire { "_id": "", "value": { } }
structure des résultats de mapReduce, mais il permet le type d'agrégation que vous recherchez.
Il y a aussi une référence à ce problème JIRA :SERVER-14466 , mais je ne tiendrais pas beaucoup de mouvement sur ce front.
Vous pouvez donc utiliser mapReduce mais il serait conseillé de s'éloigner de l'utilisation de DBRef et de définir une autre forme de "références manuelles" en intégrant des informations de "collection" et de "base de données" ou en s'appuyant sur une définition externe de telles choses dans votre schéma d'application, selon sur vos besoins. Tant que vous suivez les mêmes règles, vous pouvez utiliser le cadre d'agrégation pour tout ce qui a des noms de propriété valides.