使用Mongoose调用MongoDB聚合管道统计数据时报错BadValue如何解决
MongoDB Aggregation报错code=2 BadValue问题解决方案
错误原因
- 问题出在
$match阶段的字段声明规则错误:MongoDB聚合管道中,只有在聚合算子内引用字段取值时才需要给字段名加$前缀,直接作为匹配键的文档字段不需要加前缀。 - 你代码中
$match里写的$ratingsAverage属于非法键名,MongoDB无法识别以$开头的自定义文档字段,因此抛出BadValue参数错误。
修正后的代码
exports.getTourStats = async (req, res) => { try { const stats = await Tour.aggregate([ { // 去掉匹配字段前的$符号即可 $match: { ratingsAverage: { $gte: 4.5 } } }, { $group: { _id: null, avgRating: { $avg: '$ratingsAverage' }, avgPrice: { $avg: '$price' }, minPrice: { $min: '$price' }, maxPrice: { $max: '$price' }, } } ]); res.status(200).json({ status: 'Success', data: { stats }, }); } catch (err) { res.status(400).json({ message: err }) }
内容的提问来源于stack exchange,提问作者siddharth 28
相关产品推荐
相关产品推荐

