2012-01-09 7 views
30

que estoy haciendo una inserción simple en Mongo ...¿Cómo obtener el identificador de objeto en PyMongo después de una inserción?

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

Después se inserta el documento nota, que necesito para obtener el ID de objeto inmediatamente. El resultado que proviene de la inserción tiene información básica sobre la conexión y los errores, pero no contiene información sobre el documento y el campo.

me encontré con algo de información sobre el uso de la función() con upsert = true actualización, yo no soy más que seguro de si ese es el camino correcto a seguir, porque aún no he probado.

Respuesta

2

actualizado; eliminado anterior porque no era correcto

Parece que también puede hacerlo con db.notes.save(...), que devuelve el _id después de realizar la inserción.

Ver para más información: http://api.mongodb.org/python/current/api/pymongo/collection.html

+0

Lo sentimos, pero un poco confundido por pymongo - respuesta actualizada que debería funcionar. –

+1

Tenga en cuenta que guardar (D) es en realidad un método de conveniencia del lado del conductor, ya sea para insertar (D) o actualización (D._id, D) en función de si o no D tiene un campo _id (insertar si no es así, si la actualización lo hace) –

62

Una de las cosas interesantes acerca de MongoDB es que los identificadores se generan lado del cliente.

Esto significa que incluso no tiene que pedir el servidor lo que era el ello, porque usted haya indicado qué ahorrar en el primer lugar. Usando pymongo, el valor de retorno de una inserción será la identificación del objeto. Échale un vistazo:

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

Esto debe marcarse como correcto. ¡Gracias! –

+0

ningún problema Shane –

+1

buena respuesta, aunque me gustaría sugerir el uso de '' _id' o id_' como el nombre. No utilizo 'id' mucho en python, pero probablemente sea un buen hábito no usar nombres de funciones incorporadas. – beardc

Cuestiones relacionadas