用猫鼬填充后如何聚合

2023-12-23

我正在使用猫鼬,在填充后进行聚合时遇到问题。 下面是一个例子。

猫鼬模型架构有两种,怪物和集合。

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”到模式“monster”的外键。

我想使用如下所示的路径填充“怪物”和“集合”。

Collection.find().populate('_monster')

我想汇总这个结果,如下所示。

AboveResult.aggregate([
    {
        '$project': {
            'new_field': { 
                '$add': [ 
                     '$addedPower', '$addedArmor', '$_monster.power', '$_monster.armor' 
                ]
            }
        }
    }
]);

上面不起作用,但我认为它可以解释我想要的东西。答案将不胜感激。


您可以使用$lookup https://docs.mongodb.com/manual/reference/operator/aggregation/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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用猫鼬填充后如何聚合 的相关文章

随机推荐