如何使用Java从mongodb获取最后插入的N条记录?

Posted

技术标签:

【中文标题】如何使用Java从mongodb获取最后插入的N条记录?【英文标题】:How to get the last inserted N records from mongodb using Java? 【发布时间】:2015-10-12 23:36:16 【问题描述】:

有一个类似的帖子使用 mongodb 脚本 mongodb: how to get the last N records?

如何通过 Java 获取最后插入的集合文档来实现相同的目标? 以防万一,我使用的是第三版的mongodb Java驱动,我在pom.xml中的mongodb依赖如下:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.0.2</version>
</dependency>   
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>bson</artifactId>
    <version>3.0.2</version>
</dependency>

【问题讨论】:

【参考方案1】:

使用 .limit()

db.foo.find().limit(50);

或者如果你想排序然后获取最后的记录,那么你可以这样做

db.foo.find().sort(_id:1).limit(50);  and -1 for descending.

【讨论】:

它是一个java代码,你可以尝试做MongoDatabase db = client.getDatabase("test"); db.collection.find().sort(new Document("x", 1)).limit(n);如果您仍然遇到问题,可以将代码放在这里。我希望这能解决您的问题。 @Rashit,谢谢。 ("x", 1) 是什么意思,“x”是文档中的任何字段吗?这里的 1 是什么?怎么做“和-1降序”,代码是什么?顺便说一句“db.foo.find().sort(_id:1).limit(50)”没有编译。 是的 x 是任何字段。是的,只需使用 -1 以与上述相同的代码格式进行降序。也请采纳答案。谢谢。 这段代码未编译:FindIterable currentVersionDocumentIterable = coll.find(); currentVersionDocumentIterable.sort("name", 1).limit(50); 试试 coll.find().sort("name",1).limit(50);【参考方案2】:

这是 MongoDB 版本 3 中的新语法,因此我无法使用建议的答案。所以工作代码如下:

MongoCollection<Document> coll = db.getCollection(<collectionName>);

FindIterable<Document> currentVersionDocumentIterable =   
    coll.find().sort(new Document("_id", -1)).limit(50);

内部排序需要插入“新文档”

【讨论】:

以上是关于如何使用Java从mongodb获取最后插入的N条记录?的主要内容,如果未能解决你的问题,请参考以下文章

Java MongoDB FindOne 获取最后插入的记录

从 GoLang 中的 mongodb 获取最后插入的元素

从 GoLang 中的 mongodb 获取最后插入的元素

如何从 MongoDB 集合中获取具有匹配键的最后 N 个元素

如何从 MongoDB 集合中获取具有匹配键的最后 N 个元素

一日一技:如何正确获取 MongoDB 集合里面的最后一条数据