问题描述
我在MongoDB中收集了以下文档,我试图获取评分和计数的平均值,但始终获取Null作为平均值。请帮忙,我还检查了评级字段类型是否为数字,该数字应返回5作为平均值
[
{
"create_date": "2020-08-10T16:40:55.838Z","_id": "5f31789c41b89e1b1c47bf4e","first_name": "dd","last_name": "sds","email": "guru@sds.com","phone": "23123212","services": [
{
"_id": "5f3181399c22ce892c29e916","amount": 10,"service": "5f2fc9fc54ed4528c899ca13"
}
],"address": [
{
"_id": "5f341872ef6a6a44f0a307f5","street": "guru@sds.com","city": "asdfgh","state": "czxczx","postal": "324324"
},{
"_id": "5f341877ef6a6a44f0a307f6","postal": "324324"
}
],"ratings": [
{
"_id": "5f356ee07f72d453d04e7bdf","rating": 5,"jobId": "5f34233efe7fca44447a8454","ratingBy": "5f3172905a9f542cccf8205f"
},{
"_id": "5f356f44bb933d0c38999ac5","ratingBy": "5f3172905a9f542cccf8205f"
}
]
}
]
并尝试从评分中获取计数和平均值,但是它始终返回NULL,我只需要评分数和平均值即可。
我尝试使用下面的代码来获得相同的结果,但未按预期工作,我查看了所有要求相同的帖子数,但仍然没有得到我的结果,不知道我在哪里弄错了。
let docs = await Provider.aggregate([
{ $match: { _id: ObjectId("5f31789c41b89e1b1c47bf4e") } },{
$group: {
_id: "$ratings._id",average: { $avg: "$ratings.rating" },},]);
预先感谢您的帮助。
解决方法
我发现下面的代码对我来说很有效
let userInfo = await Provider.aggregate([
{ $match: { _id: ObjectId(req.params.userid) } },{
$addFields: {
averageRating: {
$avg: "$ratings.rating",},]);