Там раньше раздел в руководстве, что в явной форме заявила, что DBRef не поддерживается в рамках агрегации наряду с различными другими типами BSON.
старый канал чтения, как показано в этом google groups archive сообщение:
Предупреждение: Трубопровод не может работать на значения следующих типов: Binary
, Symbol
, MinKey
, MaxKey
, DBRef
, Code
и CodeWScope
,
Это может все еще быть где-то там, но я просто не могу найти его прямо сейчас :)
Кроме того, как aluded в этой ветке сообщений является то, что в стороне от этого не поддерживается в рамках агрегации, то другой вариант (и только реальная опция для агрегации) заключается в том, чтобы вместо этого использовать метод 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 и определить альтернативную форму «справочных ссылок» либо вложения «коллекции», так и «базы данных» или полагаться на внешнее определение таких вещей в вашем схемы приложения, в зависимости от ваших потребностей. Пока вы соблюдаете те же правила, вы можете использовать структуру агрегации для чего-либо с действительными именами свойств.