如何在PyMongo中持久化对象后获取其ID?

5 投票
4 回答
6224 浏览
提问于 2025-04-16 00:15

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

obj = {'foo': 'bar'}
collection.insert(obj)

那么MongoDB会自动为obj生成一个_id字段;你可以用下面的代码来确认这一点

print obj

这会返回类似这样的内容

{'foo': 'bar', '_id': ObjectId('4c2fea1d289c7d837e000000')}

我的问题是:我怎么才能把这个_id拿出来,以便我可以使用它呢?

比如说,如果我想从数据库中删除obj,我会想要做类似这样的事情

collection.remove(obj['_id'])

但是当我尝试这样做时,我收到的消息是

TypeError: 'ObjectId' object is unsubscriptable.

这是怎么回事呢?

4 个回答

1

你只需要传递 obj 就可以了。

12

你只需要把一个字典传给 remove,就像你之前对 insert 做的那样。所以,如果你想根据文档的 _id 值来删除一个文档,可以这样做:

collection.remove({'_id': ObjectId('4c2fea1d289c7d837e000000')})
3

插入操作会返回新插入文档的_id。

而删除操作是根据_id来删除的,所以你可以试试这样的代码:

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

撰写回答