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

时间:2014-04-09 14:05:20

标签: java mongodb

我正在向Mongo运行一个大型数据源,我需要连接一个外部客户端并从最后一个可用记录中获取源 - 而不是当前的任何记录。我有一个可以正常工作的tailable游标,但它从表的开头开始,我想让它从最近插入的记录开始。我知道怎么做,假设我有最后插入记录的_ID。我的问题是我无法让findOne在Java中正常工作以恢复最后插入的记录。简而言之,我需要Java等效的Mongo JS命令:

db.market.findOne( {$query:{}, $orderby:{$natural:-1}} )

我发现这里有几个帖子看起来很相似,但他们假设客户端也是插入记录的人,并且已经知道最后一个可用的ID。

无论如何,正确的相应Java代码将完成同样的事情 - 即获取最后一个可用记录的_ID?

我想作为一种替代方案,我可以让我的客户端插入一次性记录,获取该ID,然后从那里开始,但我更愿意以正确的方式做到这一点。

由于

5 个答案:

答案 0 :(得分:35)

要清楚,自然顺序不是插入顺序,除了上限集合的情况。您将需要另一个标准来排序。

假设您使用的是默认的ObjectID,您可以将其用作插入的指标,因为默认值以插入时间(以毫秒为单位)开始,并且始终是唯一的。

您还应该使用find而不是findOne。请尝试以下方法:

db.market.find({}).sort({_id:-1}).limit(1)

答案 1 :(得分:2)

如果你想在你的JAVA代码中这样做 你这样做了吗

Document myDoc = (Document)collection.find().sort(new BasicDBObject(<field>,-1)).first();

它将返回一个文档,该文档是该重要字段排序的最后一个文档 =)

答案 2 :(得分:1)

对于正在寻找更新答案的任何人:

这是在Java项目中使用mongodb-driver通过“ _id”查找最后插入的元素的方法。

#$my_list1
#[1] "a" "b" "c"

#$my_list2
#[1] "x" "y" "z"

希望这会有所帮助!

答案 3 :(得分:0)

Document lastInsertion = new MongoClient().getDatabase("collectionName").find().sort(new BasicDBObject("_id", -1)).first();
lastInsertion.get("key");

答案 4 :(得分:0)

最好的方法:

.findOne({[WHERE]}, {sort: {_id: -1}, limit: 1 });

{{1}}