Python 在PyMongo中持久化对象之后,如何获取该对象的ID?

Python 在PyMongo中持久化对象之后,如何获取该对象的ID?,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有一个PyMongo新手问题:如果collection是PyMongo,我用它来保存一个对象 obj = {'foo': 'bar'} collection.insert(obj) 然后MongoDB自动为obj生成一个\u id字段;一旦可以确认这一点 print obj 这会产生类似于 {'foo': 'bar', '_id': ObjectId('4c2fea1d289c7d837e000000')} collection.remove(obj['_id']) 我的问题是:我如何

我有一个PyMongo新手问题:如果
collection
是PyMongo,我用它来保存一个对象

obj = {'foo': 'bar'}
collection.insert(obj)
然后MongoDB自动为
obj
生成一个
\u id
字段;一旦可以确认这一点

print obj
这会产生类似于

{'foo': 'bar', '_id': ObjectId('4c2fea1d289c7d837e000000')}
collection.remove(obj['_id'])
我的问题是:我如何将
\u id
以我可以使用的方式收回

例如,如果我想从数据库中删除
obj
,我会认为我想做如下操作

{'foo': 'bar', '_id': ObjectId('4c2fea1d289c7d837e000000')}
collection.remove(obj['_id'])
但是当我尝试这个时,我得到了信息

TypeError: 'ObjectId' object is unsubscriptable.

发生了什么事?

你只需通过
obj
你只需通过
删除一个dict,就像你做的
插入一样。因此,要根据文档的
\u id
值删除文档,请执行以下操作:

collection.remove({'_id': ObjectId('4c2fea1d289c7d837e000000')})
doc_id = db.test.insert({"foo": 1})
db.test.remove(doc_id)

insert返回插入文档的_id

并且remove将根据_id进行删除,因此请尝试以下操作:

collection.remove({'_id': ObjectId('4c2fea1d289c7d837e000000')})
doc_id = db.test.insert({"foo": 1})
db.test.remove(doc_id)

要从文档中删除对象,必须提及条件 正如您可以为文档指定“\u id……”

_id = db.test.insert({"foo": "test"})
db.test.remove({"_id":_id})

啊,我明白了。ObjectId包装器的用途是什么?它是一种特殊类型。它比字符串更紧凑,并且包含创建时的时间戳,您可以通过generation_time()访问它。
ObjectId
可以从pymongo导入
。ObjectId import ObjectId
供查找者使用。@T.Stone:谢谢。这让我发疯。