我正在尝试对具有特定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)
})
对我所做错的任何帮助都将不胜感激。感谢。
答案 0 :(得分:1)
确保将有效的ObjectId
而非字符串传递给$ match阶段。
{
$match: {"size" : ObjectId(theRating.data[0].size), "isDeleted": false}
}