示例文档:
{
"id":123,
"message_type":"RECEIVE",
"conversation_id":"1"
"date":"2020-01-01T12:00:00"
},
{
"id":456,
"message_type":"SEND",
"conversation_id":"1"
"date":"2020-01-01T13:00:00"
},
{
"id":789,
"message_type":"SEND",
"conversation_id":"1"
"date":"2020-01-01T14:00:00"
}
上下文:
对消息的响应不嵌套在消息下。他们也不共享父/子关系。
每一条发送的信息都被认为是最后一条收到的信息的回复(我知道这看起来很奇怪,但事实确实如此)
问:计算每月消息的平均响应时间。
问题:中位数计算可能不是问题,但考虑到文档的扁平层次结构,我不确定如何计算响应时间。
我的尝试:
对于每个新发送的消息,用会话中最后接收的消息标记响应时间。
处理#1的旧对话/消息。
有更好的方法吗?管道聚合可以用于此吗?
1条答案
按热度按时间wlp8pajw1#
可能有一种方法可以使用我不知道的管道agg来实现这一点,但是由于文档的上下文彼此不“知道”,因此您可能需要为此使用脚本度量。
伪代码如下所示:
init:初始化按id分组的消息的month-vs-hashMap的空哈希Map
Map:遍历所有查询的文档并将它们分配给正确的Map
合并:计算中位数和其他指标
reduce:以您选择的格式返回度量
这是一个具体的,类似的例子。无视
nested
方面——原则仍然有效。