node.js - 用 Mongoose 填充后如何聚合

标签 node.js mongodb mongoose mongodb-query aggregation-framework

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

有两种 Mongoose 模型模式,怪物和集合。

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”的外键。

我想使用如下路径填充“monster”和“collection”。

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

我想像下面这样汇总这个结果。

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

以上不起作用,但我认为它可以解释我想要什么。回答将不胜感激。

最佳答案

您可以使用 $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);

关于node.js - 用 Mongoose 填充后如何聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39514079/

相关文章:

mongodb - `$eq` 运算符是否适用于数组点表示法?

node.js - wait 仅在异步函数中有效 - 使用 mongoosejs exec() 时

node.js - 解构mongodb查询结果返回的对象

node.js - 为 Electron React JS 应用程序创建安装程序 - 安装后运行时不加载 reactJS 组件

mongodb - MongoDB 是社区站点的正确数据库吗?

node.js - 将 express-busboy 限制在特定路线

java - 如何在java中删除mongodb集合中的所有文档

javascript - 如何从另一个函数内部的 promise 返回值?

node.js - Express js,mongodb : "ReferenceError: db is not defined" when db is mentioned outside post function

javascript - Mongoose 和 Node 查询的时机