我做一個簡單的插入到蒙戈...如何在插入後獲取PyMongo中的對象ID?註釋文檔插入
db.notes.insert({ title: "title", details: "note details"})
後,我需要立即獲取對象ID。從插入返回的結果有一些關於連接和錯誤的基本信息,但沒有文檔和字段信息。
我發現有關使用upsert = true的update()函數的一些信息,我只是不確定如果這是正確的路要走,我還沒有嘗試過。
我做一個簡單的插入到蒙戈...如何在插入後獲取PyMongo中的對象ID?註釋文檔插入
db.notes.insert({ title: "title", details: "note details"})
後,我需要立即獲取對象ID。從插入返回的結果有一些關於連接和錯誤的基本信息,但沒有文檔和字段信息。
我發現有關使用upsert = true的update()函數的一些信息,我只是不確定如果這是正確的路要走,我還沒有嘗試過。
更新;刪除以前,因爲它不正確
看起來你也可以做db.notes.save(...)
,它會執行插入後返回_id。
詳情參見: http://api.mongodb.org/python/current/api/pymongo/collection.html
一個關於MongoDB的很酷的事情是,IDS生成客戶端。
這意味着你甚至不必問服務器什麼是ID,因爲你告訴它它首先要保存什麼。使用pymongo插入的返回值將是對象ID。檢查出來:
>>> import pymongo
>>> collection = pymongo.Connection()['test']['tyler']
>>> _id = collection.insert({"name": "tyler"})
>>> print _id
4f0b2f55096f7622f6000000
這需要被標記爲正確的。謝謝! – 2013-02-08 22:02:53
沒問題Shane – 2013-02-08 22:44:25
好的答案,但我建議使用'_id'或'id_'作爲名稱。我不在python中使用'id',但是不使用內置函數名稱可能是一個好習慣。 – beardc 2013-02-23 05:03:28
對不起,有點困惑的pymongo - 更新的答案應該工作。 – 2012-01-09 04:34:29
請注意,根據D是否有_id字段,插入(D)或更新(D._id,D),保存(D)實際上是驅動程序方便的方法(如果不插入,則更新if它) – 2012-01-09 12:52:04