我和mongoose一起工作,我在填充后遇到聚合问题。 Belows就是一个例子。
有两个猫鼬模型架构,怪物和集合。
const monster = new Schema({
name: { type: String },
power: { type: Number },
armor: { type: Number },
});
const collection = new Schema({
_monster: { type: Schema.Types.ObjectId, ref: 'Monster' },
addedPower: { type: Number },
addedArmor: { type: Number },
});
如你所见,字段' _monster'是架构的外键'集合'架构'怪物'。
我想填充怪物'和'收集'使用如下所示的路径。
Collection.find().populate('_monster')
我想像下面这样汇总这个结果。
AboveResult.aggregate([
{
'$project': {
'new_field': {
'$add': [
'$addedPower', '$addedArmor', '$_monster.power', '$_monster.armor'
]
}
}
}
]);
以上不起作用,但我认为这可以解释我想要的东西。答案会很感激。
答案 0 :(得分:3)
您可以使用 $lookup
作为填充的替代方法,这可以在服务器上完成:
Collection.aggregate([
{
"$lookup": {
"from": "monsters",
"localField": "_monster",
"foreignField": "_id",
"as": "monster"
}
},
{ "$unwind": "$monster" },
{
"$project": {
"name": "$monster.name",
"power": "$monster.power",
"armor": "$monster.armor",
"addedPower": 1,
"addedArmor": 1,
'new_field': {
'$add': [
'$addedPower',
'$addedArmor',
'$monster.power',
'$monster.armor'
]
}
}
}
]).exec(callback);