В отношении mongoDB 3.4 это невозможно. Вы не можете использовать DBRef в конвейере агрегации, за исключением этапа $ match .
Я настоятельно рекомендую вам избавиться от DBRef и перейти к справочным руководствам. Однако, если вам действительно нужно сохранить DBRef, вот (уродливое) решение:
сначала создайте новую коллекцию с именем «C», где DBRefs заменяются их идентификаторами, используя mapReduce:
db.A.mapReduce(
function() {
var key = this._id;
var value = [];
for ( var index = 0; index < this.bid.length; index++){
value.push(this.bid[index].$id);
}
emit(key, value);
},
function(key,values) {
return values;
},
{
"query": {},
"out": "C"
}
)
, тогда запустите свой запрос агрегации в новой коллекции «C»:
db.C.aggregate([
{
$unwind:"$value"
},
{
$lookup:{
from:"B",
localField:"value",
foreignField:"_id",
as:"bs"
}
}
]);
:
{
"_id":ObjectId("582abcd85d2dfa67f44127e1"),
"value":ObjectId("582abcd85d2dfa67f44127e0"),
"bs":[
{
"_id":ObjectId("582abcd85d2dfa67f44127e0"),
"status":1,
"seq":0
}
]
}{
"_id":ObjectId("582abcd85d2dfa67f44127e1"),
"value":ObjectId("582abcd85d2dfa67f44127e1"),
"bs":[
{
"_id":ObjectId("582abcd85d2dfa67f44127e1"),
"status":1,
"seq":0
}
]
}