我需要找到java中最后一个插入文档的_id。我正在使用2.0.5。如果元素已更新,我在getLastError返回的输出中看不到'upserted'字段。如果元素被插入,我确实看到它。无论元素是更新还是插入,我都需要获取_id。除了发出另一个find命令之外,是否有可能以某种方式获取文档的_id?我试图减少不必要的查询。获取java中最后一个插入文档的_id
回答
您可以使用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"
}
我相信@Asha想要使用插入的功能,以便可以最大限度地减少所需的查询量。 – golja
FindAndUpdate将执行upsert并将单个调用中的目标文档返回给服务器 – blimpyacht
感谢Bryan,我会试试 – Alice
下面的代码给你最后一次修改记录:
db.products.find().sort({"$natural":1}).limit(1);
以下代码会给你最后插入的记录:
db.products.find().sort({"_id":-1}).limit(1);
db.products.find().sort({"$natural":-1}).limit(1);
- 1. Mongo DB:获取最后一个已知文档后插入的所有文档
- 2. 获取mongoDB w/Java驱动程序中最后一个插入文档的ID
- 3. 如何在插入后使用mongo csharp获取rcently插入文档的_id?
- 4. 如何获取一个文档的_id MongoDB Java
- 5. 获取最后一个插入的ID
- 6. 从ElasticSearch获取最后一个文档
- 7. 获取最后一个插入ID
- 8. 从最后插入的行中获取最后一个插入ID
- 9. jQuery文档中插入的最后
- 10. Mongoddb返回_id插入文档
- 11. MongoDb Java通过自定义获取单个文档_id
- 12. 如何获取PHP中的最后一个插入的标识
- 13. 获取MySQL中的最后一个插入的IDS
- 14. 如何在mongo-c-driver或mongo-cxx-driver中插入文档后获得`_id`?
- 15. 获取最后一个插入的最有效方法
- 16. 如何在LINQ中获取最后一个插入的ID EF
- 17. 如何获取CakePHP 3.0中的最后一个插入ID?
- 18. 获取mysql中最后一个插入行的标识
- 19. 如何获取NEO4J中插入的最后一个内部ID?
- 20. 如何获取MVC中最后一个插入的ID?
- 21. MongoDB:使用多个并发编写器获取最后插入文档的ObjectId?
- 22. mongoose.js:嵌入文档的_id
- 23. 基于_id获取顺序文档
- 24. CursorIndexOutOfBoundsException在获取最后_id时?
- 25. Rails一个MongoDB,如何获取插入的最后一个文档并确保它是线程安全的?
- 26. 如何从Zend Framework中获取最后一个插入UUID?
- 27. PHP从ODBC连接中获取最后一个插入标识
- 28. 如何在php中获取最后一个插入日期MYSQL
- 29. DB2如何从表中获取最后一个插入ID
- 30. 如何在java中获取最后插入的ID mysql mysql
我认为你必须使用另一个查询。 –