如何计算每个文档数组字段中每个项目的差异,然后计算mongodb中整个数组字段的平均值

时间:2019-12-13 03:53:46

标签: javascript mongodb nosql aggregation

我有一个mongodb聚合查询,它为我带来了这样的结果。

    [
     {
       _id:ObjectId(5d9b70bb1fbe2d416429aae6),
        deviceID:"18524122775d9b709f1fbe2d416429aadb",
        visitorEmail:"Unregistered",
        visitorName:"Guest80706",
        nsp:"/globalintltd.com",
        agentEmail:"bilawal1512@globalintltd.com",
        createdOn:"2019-10-07T17:07:07.615Z",
        messages:[
         {
            _id:ObjectId(5d9b968c1fbe2d416429b360)
            from:"BILAWAL"
            to:"5d9b709f1fbe2d416429aadb"
            body:"hello"
            cid:5d9b70bb1fbe2d416429aae6
            date:"2019-10-07T19:48:28.126Z"
            type:"Agents"
            attachment:false
            filename:null
         },
         {
            _id:ObjectId(5d9b968c1fbe2d416429b360)
            from:"BILAWAL"
            to:"5d9b709f1fbe2d416429aadb"
            body:"how may i help you?"
            cid:5d9b70bb1fbe2d416429aae6
            date:"2019-10-07T19:49:28.126Z"
            type:"Agents"
            attachment:false
            filename:null
         },
         {
            _id:ObjectId(5d9b968c1fbe2d416429b360)
            from:"BILAWAL"
            to:"5d9b709f1fbe2d416429aadb"
            body:"There?"
            cid:5d9b70bb1fbe2d416429aae6
            date:"2019-10-07T19:55:28.126Z"
            type:"Agents"
            attachment:false
            filename:null
         }
        ]
     },
    ]

通过此聚合查询,我获得了以上结果

    [{$match: {
      nsp: '/globalintltd.com',
      agentEmail: 'bilawal1512@globalintltd.com'
    }}, {$lookup: {
      from: 'messages',
      'let': {
        cid: '$_id'
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                '$cid',
                '$$cid'
              ]
            },
            type: 'Agents'
          }
        }
      ],
      as: 'messages'
    }}]

我的系统中有2个实体。代理和访客。两者都可以互相聊天。 我在每个对话消息数组中都获得了对话对象。我想要的是计算messages数组中每2个messages的(日期时间)差异,最后我要计算messages的所有差异的平均值。 基本上从每次对话中,我得到的对话都是agent的所有消息,以计算聊天的平均响应时间(即代理通常对访问者的消息响应多少时间后的平均响应时间)。那么我如何为我以对话消息数组形式接收的每个对话计算该数字呢?

0 个答案:

没有答案