2012-06-25 113 views
0

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

+0

我认为你必须使用另一个查询。 –

回答

0

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

退房的文档进行了大量详细信息: http://www.mongodb.org/display/DOCS/findAndModify+Command

附录:我只是重新审视我的回答,并认识到有一个更好的,更简单的方法。在文档通过网络发送到服务器之前,_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" 
} 
+0

我相信@Asha想要使用插入的功能,以便可以最大限度地减少所需的查询量。 – golja

+0

FindAndUpdate将执行upsert并将单个调用中的目标文档返回给服务器 – blimpyacht

+0

感谢Bryan,我会试试 – Alice

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); 
相关问题