mongodb - 如何计算 MongoDB 聚合中数组项的 $avg?
问题描述
我正在建立一个mongodb
aggregation
查询,其中我有一个数值的计算字段(数组)。我必须找到整个数组字段的平均值。我的mongodb
聚合查询是这样的
[{$match: {
nsp: '/globalintltd.com',
agentEmail: 'ahmed1549@globalintltd.com'
}}, {$lookup: {
from: 'messages',
let : {cid : '$_id'},
pipeline:[
{
$match : {
$expr:{
$eq: ['$cid', '$$cid'],
},
type: 'Agents'
}
},
{$limit : 1}
],
as: 'messages'
}}, {$project: {
agentEmail: 1,
convDate: {
$dateFromString:{
dateString: '$createdOn'
}
},
firstReplyDate:{
$dateFromString:{
dateString:{
$arrayElemAt:['$messages.date', 0]
}
}
}
}}, {$addFields: {
difference: {
$divide:[
{
$subtract:[
'$firstReplyDate',
'$convDate'
]
},
60000
]
}
}}, {$group: {
_id: {
"agentEmail" : "$agentEmail"
},
AgentFirstResponses : {
$push : "$difference"
}
}}]
从上面的查询我得到这样的结果
[
{agentEmail : "ahmed1549@globalintltd.com", convId : 3434345111, AgentFirstResponses : [33.54,65.65,9.087,5.43]},
{agentEmail : "ahmed1549@globalintltd.com", convId : 3434345112, AgentFirstResponses : [3.54,65.165,19.087,1.43]},
{agentEmail : "ahmed1549@globalintltd.com", convId : 3434345113, AgentFirstResponses : [63.54,654.65,19.087,5.43]},
{agentEmail : "ahmed1549@globalintltd.com", convId : 3434345114, AgentFirstResponses : [33.54,65.65,9.087,5.43]}
]
我想在我的查询中申请$avg
这个字段。aggregation
我怎样才能做到这一点来使用整个数组的平均值mongodb
?
我想要这样的结果
{
"agentEmail" : "ahmed1549@globalintltd.com",
"AvgFirstResponse" : 23.665(what ever average will of the whole array)
}
解决方案
将 $push 替换为 $avg,如下所示:
[{$match: {
nsp: '/globalintltd.com',
agentEmail: 'ahmed1549@globalintltd.com'
}}, {$lookup: {
from: 'messages',
let : {cid : '$_id'},
pipeline:[
{
$match : {
$expr:{
$eq: ['$cid', '$$cid'],
},
type: 'Agents'
}
},
{$limit : 1}
],
as: 'messages'
}}, {$project: {
agentEmail: 1,
convDate: {
$dateFromString:{
dateString: '$createdOn'
}
},
firstReplyDate:{
$dateFromString:{
dateString:{
$arrayElemAt:['$messages.date', 0]
}
}
}
}}, {$addFields: {
difference: {
$divide:[
{
$subtract:[
'$firstReplyDate',
'$convDate'
]
},
60000
]
}
}}, {$group: {
_id: {
"agentEmail" : "$agentEmail"
},
AgentFirstResponses : {
$avg : "$difference"
}
}}]
推荐阅读
- reactjs - Nextjs 中的路由器
- spring - 处理器出错时如何停止Spring批处理作业
- python - 在 Python 中给出不同 p 值的比例与偶然卡方检验
- javascript - JavaScript 下拉框问题 - 数组映射不起作用
- python - 正则表达式模式在剥离结束标点符号的同时标记句子?
- java - Java - 从不同目录中的另一个包导入类
- javascript - 忽略 Webpack/Babel 的 .d.ts 文件?
- bookshelf.js - 书架-如何按关系订购
- django - 从 Django 的查询集中获取 5 个随机实例
- python - 为什么在句子上使用 NLTK lemmatizer 时会出现 TypeError: unhashable type?