0

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

4

2 回答 2

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);
于 2015-03-24T07:54:38.710 回答
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"
}
于 2012-06-26T00:22:33.060 回答