web-dev-qa-db-fra.com

Comment obtenir l'identifiant d'objet dans PyMongo après une insertion?

Je fais un simple insert dans Mongo ...

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

Une fois le document note inséré, je dois obtenir immédiatement l'identifiant de l'objet. Le résultat renvoyé par l'insert contient des informations de base sur la connexion et les erreurs, mais pas d'informations sur les documents et les champs.

J'ai trouvé des informations sur l'utilisation de la fonction update () avec upsert = true. Je ne sais pas si c'est la bonne façon de faire, je ne l'ai pas encore essayée. 

37
user1125472

Un des avantages de MongoDB est que les identifiants sont générés côté client.

Cela signifie que vous n'avez même pas à demander au serveur quel était l'identifiant, car vous lui avez dit quoi sauvegarder. En utilisant pymongo, la valeur de retour d'un insert sera l'identifiant de l'objet. Vérifiez-le:

>>> import pymongo
>>> collection = pymongo.Connection()['test']['tyler']
>>> _id = collection.insert({"name": "tyler"})
>>> print _id
4f0b2f55096f7622f6000000
72
Tyler Brock

La réponse de Tyler ne fonctionne pas pour moi. Utiliser _id.inserted_id fonctionne

>>> 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
11
Kumar Saurabh

mis à jour; supprimé précédent car il n'était pas correct

Il semble que vous puissiez également le faire avec db.notes.save(...), qui retourne le _id après avoir effectué l'insertion. 

Voir pour plus d'infos: http://api.mongodb.org/python/current/api/pymongo/collection.html

2
Eve Freeman

Les nouvelles versions de PyMongo déprécient insert et à la place insert_one ou insert_many devrait être utilisé. Ces fonctions renvoient un objet pymongo.results.InsertOneResult ou pymongo.results.InsertManyResult.

Avec ces objets, vous pouvez utiliser les propriétés .inserted_id et .inserted_ids respectivement pour obtenir les ID d'objet insérés.

Voir this link pour plus d’informations sur insert_one et insert_many et this link pour plus d’informations sur pymongo.results.InsertOneResult.

0
Jurgen Strydom

Il vous suffit de l'affecter à une variable:

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