2012-01-09 69 views
30

我做一個簡單的插入到蒙戈...如何在插入後獲取PyMongo中的對象ID?註釋文檔插入

db.notes.insert({ title: "title", details: "note details"}) 

後,我需要立即獲取對象ID。從插入返回的結果有一些關於連接和錯誤的基本信息,但沒有文檔和字段信息。

我發現有關使用upsert = true的update()函數的一些信息,我只是不確定如果這是正確的路要走,我還沒有嘗試過。

回答

2

更新;刪除以前,因爲它不正確

看起來你也可以做db.notes.save(...),它會執行插入後返回_id。

詳情參見: http://api.mongodb.org/python/current/api/pymongo/collection.html

+0

對不起,有點困惑的pymongo - 更新的答案應該工作。 – 2012-01-09 04:34:29

+1

請注意,根據D是否有_id字段,插入(D)或更新(D._id,D),保存(D)實際上是驅動程序方便的方法(如果不插入,則更新if它) – 2012-01-09 12:52:04

62

一個關於MongoDB的很酷的事情是,IDS生成客戶端。

這意味着你甚至不必問服務器什麼是ID,因爲你告訴它它首先要保存什麼。使用pymongo插入的返回值將是對象ID。檢查出來:

>>> import pymongo 
>>> collection = pymongo.Connection()['test']['tyler'] 
>>> _id = collection.insert({"name": "tyler"}) 
>>> print _id 
4f0b2f55096f7622f6000000 
+2

這需要被標記爲正確的。謝謝! – 2013-02-08 22:02:53

+0

沒問題Shane – 2013-02-08 22:44:25

+1

好的答案,但我建議使用'_id'或'id_'作爲名稱。我不在python中使用'id',但是不使用內置函數名稱可能是一個好習慣。 – beardc 2013-02-23 05:03:28