1

在我的收藏中,文档如下所示:

在此处输入图像描述

通过这样做,我设法获得了最后插入的文档:

collection.find().sort(new Document("date",-1)).first().getDate()

但是现在我需要得到最后一个按日期并且有一个特定值的functionalityName. 我被卡住了,因为我不知道如何修改它以考虑两个过滤器。我怎么做?
我查看了 Mongo 中的多个过滤器,但由于我不是在寻找特定日期,而是在寻找更大的日期(最后一个),所以我不知道如何与其他过滤器一起指定它。

4

2 回答 2

1

听起来你想要一个过滤器和一个排序,查询看起来像这样:

collection.find(Filters.eq("functionalityName", "specificValue"))
          .sort(new Document("date",-1))
          .first()
          .getDate()

所以该sort部分保持原样,但在find您添加过滤器的部分中。

您还需要导入 Filters 类:

import com.mongodb.client.model.Filters.*;

或者,为了简洁起见,您可以静态导入Filters该类,这是官方过滤器文档中的示例的完成方式,如果需要添加其他过滤器,您可能需要查看。

import static com.mongodb.client.model.Filters.*;

// ...

collection.find(eq("functionalityName", "specificValue"))
      .sort(new Document("date",-1))
      .first()
      .getDate()
于 2019-05-13T18:43:41.110 回答
1

等的串联肯定有效,find实际上仅在数据库端执行,它将返回结果,然后您的应用程序将对其应用排序。sortfind()

如果您想创建一个执行所有这些操作数据库端的查询,您需要一个管道。为此,您可以使用 java 驱动程序的聚合框架,让您执行类似的操作

collection.aggregate(
      Arrays.asList(
              match(eq("functionalityName", "specificValue")),
              sort(descending("date")),
              project(fields(include("date")))
      )
)

在文档中,您可以找到可以应用于管道的所有阶段。

于 2019-05-16T11:34:47.747 回答