Как получить идентификатор объекта после его сохранения в PyMongo? - PullRequest
4 голосов
/ 22 июня 2010

У меня вопрос новичка в PyMongo: если collection - это коллекция PyMongo , и я использую его для сохранения объекта с

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

, то MongoDB автоматически генерирует _idполе для obj;однажды могу подтвердить это с помощью

print obj

, что дает что-то вроде

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

Мой вопрос таков: как я могу получить этот _id обратно таким образом, чтобы я мог использовать его?

Например, если я хочу удалить obj из базы данных, я думаю, что я хотел бы сделать что-то вроде

collection.remove(obj['_id'])

, но когда я пытаюсь это сделать, я получаюсообщение

TypeError: 'ObjectId' object is unsubscriptable.

Что происходит?

Ответы [ 4 ]

12 голосов
/ 22 июня 2010

Вам просто нужно передать remove диктовку, как вы это сделали insert.Итак, чтобы удалить документ на основе его значения _id, сделайте что-то вроде:

collection.remove({'_id': ObjectId('4c2fea1d289c7d837e000000')})
3 голосов
/ 22 июня 2010

insert возвращает _id вставленного документа.

, а remove удаляет на основе _id, поэтому попробуйте что-то вроде:

doc_id = db.test.insert({"foo": 1})
db.test.remove(doc_id)
1 голос
/ 22 июня 2010

Вы можете просто передать obj.

0 голосов
/ 04 января 2011

для удаления объекта из документа необходимо упомянуть условие Как вы можете указать "_id" для документа ........

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