2012-01-09 16 views
30

Sto facendo un semplice inserto in Mongo ...Come ottenere l'ID oggetto in PyMongo dopo un inserimento?

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

Dopo aver inserito il documento nota, ho bisogno di ottenere immediatamente l'id oggetto. Il risultato che viene restituito dall'inserto contiene alcune informazioni di base relative alla connessione e agli errori, ma nessun documento e informazioni sul campo.

Ho trovato alcune informazioni sull'utilizzo della funzione update() con upsert = true, non sono sicuro che sia la strada giusta da percorrere, non l'ho ancora provato.

risposta

2

aggiornato; rimosso precedente perché non era corretto

Sembra che lo si possa fare anche con db.notes.save(...), che restituisce _id dopo aver eseguito l'inserimento.

Vedi per ulteriori informazioni: http://api.mongodb.org/python/current/api/pymongo/collection.html

+0

Scusa, è stato un po 'confuso da pymongo - risposta aggiornata che dovrebbe funzionare. –

+1

Si noti che save (D) è in realtà un metodo di convenienza sul lato driver per insert (D) o update (D._id, D) a seconda che D abbia o meno un campo _id (inserire se non lo fa, aggiornare se lo fa) –

62

Una delle cose più interessanti di MongoDB è che gli ID vengono generati lato client.

Ciò significa che non è nemmeno necessario chiedere al server quale fosse l'ID, perché gli hai detto cosa salvare in primo luogo. Usando pymongo il valore di ritorno di un inserto sarà l'id dell'oggetto. Check out:

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

Questo deve essere contrassegnato come corretto. Grazie! –

+0

nessun problema Shane –

+1

Buona risposta, anche se suggerirei l'uso di '_id' o 'id_' come nome. Non uso 'id' molto in python, ma probabilmente è una buona abitudine non usare nomi di funzioni built-in. – beardc

Problemi correlati