javascript - 需要获取mongodb上复杂数据的平均值
问题描述
我无法使用 mongoose (nodejs) 在 mongodb 中找到复杂搜索的平均值(我不确定它是否可能)。
所以,我有一个童子军的集合。球探基本上是用户在比赛(夹具)中对球员的投票。侦察项目看起来像这样:
{
"_id": "6036dbbd148ccf17e82e6f14",
"player": "60243968d7ec0721344514ab",
"user": "601e9c826a339228e8f54305",
"fixture": "602435741f2e4e263492de66",
"score": 7,
"text": "Lorem ipsum",
"likes": 92,
"createdDate": "2021-02-24T23:05:33.176Z",
"__v": 0
},
{
"_id": "6036dbbd148ccf17e82e6f16",
"player": "60243968d7ec0721344514ab",
"user": "601e9c826a339228e8f54306",
"fixture": "602435741f2e4e263492de66",
"score": 1,
"text": "Lorem ipsum",
"likes": 76,
"createdDate": "2021-02-24T23:05:33.181Z",
"__v": 0
},
我需要的是:一名球员在比赛中的平均得分(在所有用户中)。这就是我正在尝试的:
Scout.aggregate([
{ $match: {
$and: [
{player: mongoose.Types.ObjectId(req.params.playerId)},
{fixture: mongoose.Types.ObjectId(req.params.fixtureId)},
]}
},
{ $group: { _id: "$_id", "avgScore": { "$avg": "$score" }}}
])
但我得到的结果是这个(这不是预期的结果 - 应该是 4 作为平均值):
{
"_id": "6036dbbd148ccf17e82e6f16",
"avgScore": 1
},
{
"_id": "6036dbbd148ccf17e82e6f14",
"avgScore": 7
}
]
解决方案
您的聚合没问题,但是您正在重新组合文档,_id
而文档总是不同的,所以这样做,
{
$group: {
_id: null,
"avgScore": {
"$avg": "$score"
}
}
}
推荐阅读
- c++ - 错误:非常量静态数据成员必须被初始化
- angular - 我想在我的 ionic 应用程序中创建一个模板驱动的表单,并通过验证它给出错误
- ffmpeg - 在 Ubuntu Linux 中将 6 个视频文件拼接成一个 360 视频
- go - 尽管在启动应用程序时是私有的,但如何从主包调用 main() 函数?
- python - Django-python 电子邮件表单未通过 gmail smtp 转发发件人的电子邮件地址
- typescript - 默认函数参数和扩展接口的接口
- java - 为什么在 main 方法中使用时在静态块中声明的变量找不到?
- python-3.x - Python aiosqlite 覆盖与 pysqlcipher3 的连接
- python - 检查一个数字在 Python 中是否具有相同的数字
- oauth-2.0 - 调用 Xero 刷新令牌 api 时出现错误“unsupported_grant_type”