如何在PyMongo中持久保存后获取对象的ID?

Tre*_*ham 4 python mongodb pymongo

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

obj = {'foo': 'bar'}
collection.insert(obj)
Run Code Online (Sandbox Code Playgroud)

然后MongoDB自动生成一个_id字段obj; 一旦可以证实这一点

print obj
Run Code Online (Sandbox Code Playgroud)

产生类似的东西

{'foo': 'bar', '_id': ObjectId('4c2fea1d289c7d837e000000')}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何_id以可以使用它的方式将其恢复?

例如,如果我想obj从数据库中删除,我会认为我想要做类似的事情

collection.remove(obj['_id'])
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个时,我收到了消息

TypeError: 'ObjectId' object is unsubscriptable.
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

kri*_*ina 12

你只需要传递remove一个字典,就像你一样insert.因此,要根据文档的_id值删除文档,请执行以下操作:

collection.remove({'_id': ObjectId('4c2fea1d289c7d837e000000')})
Run Code Online (Sandbox Code Playgroud)

  • 对于那些寻找它的人来说,`ObjectId`可以用`from pymongo.objectid import ObjectId`导入. (14认同)

mdi*_*olf 3

insert 返回插入文档的_id。

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

doc_id = db.test.insert({"foo": 1})
db.test.remove(doc_id)
Run Code Online (Sandbox Code Playgroud)