Как получить идентификатор объекта в PyMongo после вставки? - PullRequest
37 голосов
/ 09 января 2012

Я делаю простую вставку в Mongo ...

db.notes.insert({ title: "title", details: "note details"})

После того, как документ примечания вставлен, мне нужно немедленно получить идентификатор объекта. Результат, возвращаемый после вставки, содержит некоторую базовую информацию о подключении и ошибках, но не содержит информации о документе и поле.

Я нашел некоторую информацию об использовании функции update () с upsert = true, я просто не уверен, что это правильный путь, я еще не пробовал.

Ответы [ 5 ]

76 голосов
/ 09 января 2012

Одна из замечательных особенностей MongoDB заключается в том, что идентификаторы генерируются на стороне клиента.

Это означает, что вам даже не нужно спрашивать сервер, что это был за идентификатор, потому что вы сказали, что сохранять впервое место.При использовании pymongo возвращаемое значение вставки будет идентификатором объекта.Проверьте это:

>>> import pymongo
>>> collection = pymongo.Connection()['test']['tyler']
>>> _id = collection.insert({"name": "tyler"})
>>> print _id
4f0b2f55096f7622f6000000
13 голосов
/ 12 апреля 2018

Ответ от Тайлера не работает для меня.Использование _id.inserted_id работает

>>> import pymongo
>>> collection = pymongo.Connection()['test']['tyler']
>>> _id = collection.insert({"name": "tyler"})
>>> print(_id)
<pymongo.results.InsertOneResult object at 0x0A7EABCD>
>>> print(_id.inserted_id)
5acf02400000000968ba447f
2 голосов
/ 09 января 2012

Последнее обновление; удалено предыдущее, потому что это не правильно

Похоже, вы также можете сделать это с помощью db.notes.save(...), который возвращает _id после выполнения вставки.

Подробнее см .: http://api.mongodb.org/python/current/api/pymongo/collection.html

1 голос
/ 29 января 2019

Более новые версии PyMongo обесцениваются insert, и вместо них следует использовать insert_one или insert_many.Эти функции возвращают объект pymongo.results.InsertOneResult или pymongo.results.InsertManyResult.

С этими объектами вы можете использовать свойства .inserted_id и .inserted_ids соответственно для получения идентификаторов вставленных объектов.

См. эта ссылка для получения дополнительной информации о insert_one и insert_many и эта ссылка для получения дополнительной информации о pymongo.results.InsertOneResult.

0 голосов
/ 13 марта 2018

Вам просто нужно присвоить его некоторой переменной:

someVar = db.notes.insert({ title: "title", details: "note details"})
...