Sailsjs MongoDB聚合查询

时间:2017-03-05 22:06:36

标签: node.js mongodb sails.js

我正在尝试对具有特定id的对象的数据库进行聚合查询,并将其总结,并给我一个平均值。

我的情景

我的模型看起来像这样:

attributes: {

    user: {
        model: 'user',
        required: true
    },

    rating: {
        type: 'integer',
        enum: [0, 1, 2, 3, 4, 5],
        defaultsTo: 0,
        required: true
    },

    inventory: {
        model: 'subItem'
    },

    size: {
        model: 'size',
        required: true
    },

    isDeleted: {
        type: 'boolean',
        defaultsTo: false
    }
}

汇总这样的平均评分:

const aggQuery = [
    {
        $match: {"size" : theRating.data[0].size, "isDeleted": false}
    },
    {
        $group: {
            _id: "$size",
            total: { $sum: 1 },
            average: { $avg: "$rating" }
        }
    }
]

我的功能

module.exports = {

    aggregateQuery: (model, aggregate) => {
        return new Promise((resolve, reject) => {

            model.native(function (err, collection) {
                if (err) return reject(err);

                collection.aggregate(aggregate, function (err, result) {
                    if (err) return reject(err);

                    return resolve(result);
                })
            })
        })
    }
}

使用案例 我在编写测试时用16条记录填充数据库,但是在运行聚合查询后,我得到一个空数组

NativeQueryService.aggregateQuery(Rating, aggQuery).then(result => {
    console.log(result)
}).catch(err => {
    console.log(err)
})

对我所做错的任何帮助都将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

确保将有效的ObjectId而非字符串传递给$ match阶段。

{
    $match: {"size" : ObjectId(theRating.data[0].size), "isDeleted": false}
}