2012-01-09 93 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