2012-06-25 78 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); 
相關問題