Как получить идентификатор объекта в PyMongo после вставки?
Я делаю простую вставку в Mongo...
db.notes.insert({ title: "title", details: "note details"})
После того, как документ примечания вставлен, мне нужно немедленно получить идентификатор объекта. Результат, который возвращается из вставки, содержит некоторую базовую информацию о соединении и ошибках, но не информацию о документе и поле.
Я нашел некоторую информацию об использовании функции update() с upsert = true, я просто не уверен, что это правильный путь, я еще не пробовал.
Ответы
Ответ 1
Одна из интересных вещей в MongoDB заключается в том, что идентификаторы создаются на стороне клиента.
Это означает, что вам даже не нужно спрашивать у сервера, что такое идентификатор, потому что вы сказали ему, что сохранить в первую очередь. Используя pymongo, возвращаемое значение вставки будет идентификатором объекта. Проверьте это:
>>> import pymongo
>>> collection = pymongo.Connection()['test']['tyler']
>>> _id = collection.insert({"name": "tyler"})
>>> print _id
4f0b2f55096f7622f6000000
Ответ 2
Ответ от Тайлера не работает для меня. Использование _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
Ответ 3
обновляется; удалено ранее, потому что это было не правильно
Похоже, вы также можете сделать это с помощью db.notes.save(...)
, который возвращает _id после выполнения вставки.
См. дополнительную информацию:
http://api.mongodb.org/python/current/api/pymongo/collection.html
Ответ 4
Вам просто нужно присвоить его некоторой переменной:
someVar = db.notes.insert({ title: "title", details: "note details"})
Ответ 5
Более новые версии PyMongo обесценивают insert
, и вместо insert_many
следует использовать insert_one
или insert_many
. Эти функции возвращают объект pymongo.results.InsertOneResult
или pymongo.results.InsertManyResult
.
С этими объектами вы можете использовать свойства .inserted_id
и .inserted_ids
соответственно для получения идентификаторов вставленных объектов.
Смотрите эту ссылку для получения дополнительной информации о insert_one
и insert_many
и эту ссылку для получения дополнительной информации о pymongo.results.InsertOneResult
.