获取java中最后一个upserted文档的_id

时间:2012-06-25 06:56:08

标签: java mongodb

我需要在java中找到最后一个upserted文档的_id。我使用的是2.0.5。如果元素已更新,我在getLastError返回的输出中看不到'upserted'字段。如果元素被插入,我确实看到了。无论元素是否已更新或插入,我都需要获取_id。除了发出另一个find命令之外,是否可以以某种方式获取文档的_id?我试图减少不必要的查询。

2 个答案:

答案 0 :(得分:0)

您可以使用DBCollection.findAndModify()。您可以设置它的参数,使其执行upsert并返回包含刚刚创建/修改的对象的_id的DBObject。

查看文档以获取更多信息: http://www.mongodb.org/display/DOCS/findAndModify+Command

ADDENDUM:我刚刚回顾了我的回答,并意识到有一种更好,更简单的方法。在通过线路将文档发送到服务器之前,_id的值始终设置为客户端。如果您尚未为_id分配值,则驱动程序会为您执行此操作。由于客户端设置了_id,因此您甚至可以在插入操作开始之前知道它是什么。考虑这个例子。

> var id = ObjectId()
> id
ObjectId("5511062d729ddce46b99ea3f")
> db.test.insert( { _id: id, text:"a trivial experiment"})
WriteResult({ "nInserted" : 1 })
> db.test.find( { _id: id} )
{
    "_id" : ObjectId("5511062d729ddce46b99ea3f"),
    "text" : "a trivial experiment"
}

答案 1 :(得分:0)

以下代码将为您提供上次修改记录:

db.products.find().sort({"$natural":1}).limit(1);

以下代码将为您提供上次插入的记录:

db.products.find().sort({"_id":-1}).limit(1);
db.products.find().sort({"$natural":-1}).limit(1);