Подтвердить что ты не робот

Как получить идентификатор объекта в PyMongo после вставки?

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

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

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

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

4b9b3361

Ответ 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.