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

如何使用spring data mongodb为每个用户获取最新记录?

江恩
2023-03-14

我正在努力处理mongo查询。我需要在单个查询中查找文档集合。集合应包含每个用户在单个查询中使用的最新日期(字段创建日期)的文档。

在斯波克有一个测试案例来演示我想要实现的目标:

def 'should filter the newest location for every user'() {
    given:
        List locationsInDb = [
            buildLocation(USERNAME_1, '2017-02-03T10:37:30.00Z'),
            buildLocation(USERNAME_1, '2017-03-04T10:37:30.00Z'),
            buildLocation(USERNAME_2, '2017-02-05T10:37:30.00Z'),
            buildLocation(USERNAME_2, '2017-03-06T10:37:30.00Z')
        ]
        insertToMongo(locationsInDb)
    when:
        List filteredLocations = locationRepository.findLastForEveryUser()
    then:
        filteredLocations == [locationsInDb.get(1), locationsInDb.get(3)]
}

我发现不同的方法是<代码>2.1.0的一部分。M1版本,因此尚未提供。

我也在尝试@Query注释,但留档(下面的链接)没有指定如何创建像我这样的查询。

https://docs.spring.io/spring-data/data-document/docs/current/reference/html/#d0e3309

谢谢你的帮助。

共有1个答案

夏侯博
2023-03-14

无法通过Spring数据中的派生查询或使用MongoDB本机查询操作符来表示您正在查找的查询。Distinct也不能完成这项工作,因为它只是将单个字段的不同值提取到一个数组中。

请考虑使用聚合。Spring Data的详细信息可以在参考留档中找到。

 类似资料:
  • 问题内容: 我有一个类似于 我想获取每个“ deviceId”的最新“数据”(使用message.ts作为时间戳)。 到目前为止,我已经设法使用查询按时间戳记的顺序取回了数据, 但是我不知道如何删除重复的设备记录。 这可以在CosmosDB SQL引擎内完成吗? 问题答案: 感谢Mark Brown的评论,我发现以下内容似乎是此问题的正确解决方案。不仅仅只是一次性使用一些SQL那样优雅,但这确实是

  • 问题内容: 这个问题已经在这里有了答案 : SQL只选择列上具有最大值的行[重复] (27个答案) 去年关闭。 假设我有一个带有列的表: 我只想从每个用户那里获取最新消息,就像您在深入实际线程之前在FaceBook收件箱中看到的那样。 此查询似乎使我接近所需的结果: 但是查询给我的是来自每个用户的最旧消息,而不是最新消息。 我不知道这一点。 问题答案: 您应该找出每个组(子查询)中的最后一个值,然

  • 问题内容: 不幸的是,SQL并不是很容易找到我。我有两个表,一个表和一个表。 贷款支付表: ID(主键),LoanID(与贷款表上的ID匹配),PaymentDate,Amount等。 我需要一条sql语句,该语句可以给我每个月输入的最后一笔付款(如果有的话)。我目前的说法没有给我结果。还存在一个问题,有时在该月的最大日期有时会有平局,因此我也必须能够处理该问题(我的想法是在平局的情况下选择最大的

  • 问题内容: 在日志中,我得到: “来自LAHETYS”发生了什么事?使用HQL或/和SQL处理此问题的最佳实践是什么? 另一个问题: 我得到一个例外: 所以我不能将对象投射到我的Lahetys对象上,很奇怪吗? 谢谢!佐美 问题答案: 您的HQL查询无效。LIMIT不是有效的HQL子句。要在Hibernate中做到这一点,只需

  • 我有一个包含4列的Athena表,我想查找: null

  • 问题内容: 我有此数据: 代码(对于SQL Server 2005): 我想为每个名称获取具有最新DATE的ID。像这样: 实现此目的最优雅的方法是什么? 问题答案: 尽量避免使用保留字(和模糊的列名),例如…