MongoDB Java 使用多个过滤器并获得最后一个
MongoDB Java use multiple filters and get last
在我的 collection 中,文档如下所示:
我通过这样做设法获得了最后插入的文档:
collection.find().sort(new Document("date",-1)).first().getDate()
但现在我需要按日期获取最后一个并且具有 functionalityName
的特定值。我被卡住了,因为我不知道如何修改它以考虑两个过滤器。我该怎么做?
我查看了 Mongo 中的多个过滤器,但由于我不是在寻找特定日期而是在寻找更大的日期(最后一个),我不知道如何将其与其他过滤器一起指定。
听起来您需要一个过滤器和一个排序,查询将如下所示:
collection.find(Filters.eq("functionalityName", "specificValue"))
.sort(new Document("date",-1))
.first()
.getDate()
因此 sort
部分保持原样,但在 find
部分添加过滤器。
您还需要导入过滤器 class:
import com.mongodb.client.model.Filters.*;
或者,您可以为简洁起见静态导入 Filters
class,这就是 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()
find
、sort
等的连接确实有效, 但是 只有 find()
实际上是在数据库端执行的,它将 return 结果然后排序将由您的应用程序应用。
如果你想创建一个查询来执行所有这些操作数据库端你需要 pipeline. To do it you can use the Aggregation Framework 的 java 驱动程序,让你做这样的事情
collection.aggregate(
Arrays.asList(
match(eq("functionalityName", "specificValue")),
sort(descending("date")),
project(fields(include("date")))
)
)
In the documentation 您可以找到可以应用于管道的所有阶段。
在我的 collection 中,文档如下所示:
我通过这样做设法获得了最后插入的文档:
collection.find().sort(new Document("date",-1)).first().getDate()
但现在我需要按日期获取最后一个并且具有 functionalityName
的特定值。我被卡住了,因为我不知道如何修改它以考虑两个过滤器。我该怎么做?
我查看了 Mongo 中的多个过滤器,但由于我不是在寻找特定日期而是在寻找更大的日期(最后一个),我不知道如何将其与其他过滤器一起指定。
听起来您需要一个过滤器和一个排序,查询将如下所示:
collection.find(Filters.eq("functionalityName", "specificValue"))
.sort(new Document("date",-1))
.first()
.getDate()
因此 sort
部分保持原样,但在 find
部分添加过滤器。
您还需要导入过滤器 class:
import com.mongodb.client.model.Filters.*;
或者,您可以为简洁起见静态导入 Filters
class,这就是 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()
find
、sort
等的连接确实有效, 但是 只有 find()
实际上是在数据库端执行的,它将 return 结果然后排序将由您的应用程序应用。
如果你想创建一个查询来执行所有这些操作数据库端你需要 pipeline. To do it you can use the Aggregation Framework 的 java 驱动程序,让你做这样的事情
collection.aggregate(
Arrays.asList(
match(eq("functionalityName", "specificValue")),
sort(descending("date")),
project(fields(include("date")))
)
)
In the documentation 您可以找到可以应用于管道的所有阶段。