当前位置: 首页 > 知识库问答 >
问题:

Mongo db$组动态表达式

贡威
2023-03-14

我有一组带有时间戳的日志,需要按一些不存在的“虚拟会话”对这些日志进行分组。

如果上一个会话的最后一次登录和第一次登录之间有半个小时,则新的分组会话开始。

例如,我们有以下一组数据:

[
{
    id: "b4f0d0d7-495b-48db-95bf-d5ac0c8c9e9b"
    time: 1461872894322
    timestamp: "Apr 28, 2016 7:48:14 PM",
},
{
    id: "bf55ca2f-b544-406c-bed6-766a1204683d"
    time: 1461872937941
    timestamp: "Apr 28, 2016 7:48:57 PM"
},
{
    id: "7f2ab420-0434-46f8-9444-6e2ffa73aea8"
    time: 1461873088155
    timestamp: "Apr 28, 2016 7:51:28 PM"
},
{
    id: "dd31124c-0375-454a-acca-c239465a2b22"
    time: 1461839257257
    timestamp: "Apr 28, 2016 10:27:37 AM"
},
{
    id: "a4370974-bfea-408f-aa69-973961e9f058"
    time: 1461839281324
    timestamp: "Apr 28, 2016 10:28:01 AM"
}
]

它应该分组在两个虚拟会话中。作为分组的结果,我可以在mongo aggregate$group中获得每个组的最小和最大时间,但是如何编写正确的表达式呢?

预期的答案大概是

[
{min: 1461872894322, max: 1461873088155},
{min: 1461839257257, max: 1461839281324}
]

共有1个答案

赏弘
2023-03-14

不幸的是,mongo查询无法做到这一点,因为前一行没有句柄(如CTE公共表表达式)。

要解决此问题,您需要处理数据客户端(或在mongo控制台中使用javascript-就像来自sql world的SP)并遍历所有文档,检查时间间隔并向集合添加分组指示符。然后您将能够通过添加的分组指示器进行分组。

考虑起诉$let,因为它可以访问外部变量-但这是RO访问,所以我们不能依赖它。

玩得开心!欢迎任何评论。

 类似资料:
  • 主要内容:使用正则表达式,在不区分大小写的情况下使用正则表达式,对数组元素使用正则表达式,优化正则表达式查询在编程语言中,正则表达式可以使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。MongoDB 可以使用 $regex 操作符来设置匹配字符串的正则表达式,MongoDB 使用 PCRE(Perl 兼容的正则表达式)作为正则表达式语言。 与文本搜索不同,您不需要执行任何配置或命令就可以直接使用正则表达式。假设我们已经在名为 posts 的集合中插入了一个文档,如下所示: 使用正则表达

  • 我有以下在MongoDB中运行良好的MongoDB聚合查询 如何使用Spring Data MongoDB API来表示这个复杂的$sum操作? sum()方法只需要简单字符串。根据这张票(已关闭)https://jira.spring.io/browse/DATAMONGO-784聚合应支持复杂的操作,如$cmp和$cond 更新:这里似乎忘记了该方法的sum(AggregationExpres

  • 我有一个静态的通用FormBuilder超文本标记语言助手方法(HTMLHelper类上的扩展方法),它接受视图模型类型的通用参数,然后当从数据库传递一个或多个字符串属性名称时,生成一个超文本标记语言形式在ASP. NET MVC 5.1 with. NET 4.5中。 我有一个公共方法来生成表单,还有单独的私有方法来生成表单中的“模块”部分,然后渲染其中的每个字段。类型参数从上到下沿此链传递。

  • 问题内容: 我能够在applicationContext.xml中创建taskScheduler,并且根据该属性定期触发我的工作。 我想在调度程序启动后更改此表达式(触发时间),这意味着JavaEE应用程序正在运行。 使用Spring 3.XX 问题答案: 其实我也遇到过同样的问题 我假设您需要从用户那里获取date(1-31),时间,星期几,调度程序的类型(每日,每月,每周)。 首先,您需要根据

  • ...使用进行编码。使用的原因是我想要自动化许多工作流,因此动态地创建它们对我会很有用。 我的两个输入数据流是: 我试图更好地理解的和参数,以确定如何最好地解决我的问题。我已经看过了文件,但我并不清楚其中的区别。 应使用哪些参数来确保代码以最大性能工作? 是否有方法将表达式的结果赋回到? 另外,为了使事情更加复杂,如何将作为字符串表达式中的参数传递?

  • 例如现有数据结构: msg数组长度最大为10,超出的时候,新建id='a:1'后再向msg追加数据