MongoDB Java使用多个过滤器并获得最后一个

时间:2019-05-13 16:14:29

标签: java mongodb sorting bson mongo-collection

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

enter image description here

我设法通过以下操作获取了最后插入的文档:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

因此,sort部分保持不变,但是在find部分中添加了过滤器。

您还需要导入Filters类:

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

或者,为了简洁起见,您可以静态导入Filters类,这是完成the examples in the official Filters documentation的过程,您可能需要检查一下是否需要添加其他过滤器。

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

// ...

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

答案 1 :(得分:1)

findsort等的连接肯定有效,实际上只有find()在数据库端执行,它将返回结果,并且然后排序将由您的应用程序对其应用。

如果要创建执行所有这些操作数据库端的查询,则需要pipeline。为此,您可以使用Java驱动程序的Aggregation Framework来执行类似的操作

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

In the documentation,您可以找到可应用于管道的所有阶段。