У меня есть вопрос новичка в 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
Trevor Burnham 22 Июн 2010 в 02:55

4 ответа

Лучший ответ

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

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

doc_id = db.test.insert({"foo": 1})
db.test.remove(doc_id)
3
mdirolf 22 Июн 2010 в 00:58

Вы можете просто пройти obj.

1
Matthew Flaschen 21 Июн 2010 в 23:22

Для удаления объекта из документа вы должны указать условие. Вы можете указать «_id» для документа ........

_id = db.test.insert({"foo": "test"})
db.test.remove({"_id":_id})
-1
Sagar Varpe 4 Янв 2011 в 06:53

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

collection.remove({'_id': ObjectId('4c2fea1d289c7d837e000000')})
12
kristina 22 Июн 2010 в 00:21