2012-08-29 12 views
15

Sono sconcertato dal seguente problema.Cerca documento in MongoDB da _id utilizzando l'estensione Flask-pymongo

Sto usando Flask, estensione fiasco-pymongo, MongoDB versione v2.2.0-RC0, pdfile versione 4.5

Questo è il mio percorso:

@app.route("/check/<id>") 
def check(id): 
    doc=conn.db.msg.find_one({'_id':id}) 
    return render_template('base.html',name=doc) 

L'ID è una _id valida da un documento nella raccolta msg, ma restituisce SEMPRE Nessuno.

ho provato:

  • pasing l'ObjectId (id), ma restituisce errortype: non ObjectID richiamabile
  • pasing l'id come str (id) restituisce None

Qualche idea?

UPDATE: questo modo l'url completo è:

http://127.0.0.1:8000/check/5030b628895b800de1a9a792 

UPDATE2:

Ho trovato una domanda simile con (risposta) per Ruby. Non so come posso tradurlo in Python, che tipo di importazioni/moduli ho bisogno?

How can I retrieve a document by _id?

Update3: ho provato:

import bson 
@app.route("/check/<id>") 
def check(id): 
id2="'"+id+"'" 
doc=conn.db.msg.find_one({'_id':bson.objectid(id2) }) 
return render_template('base.html',name=doc) 

ma ottengo TypeError: oggetto 'modulo' non è richiamabile (doesnt lavoro con id o)

quando ho Raggiunto il 1500 suggerirò un tag frustazione tag: -S

UPDATE4:

Finalmente ho preso su & in esecuzione!

qui è la mia soluzione:

import bson 
@app.route("/check/<id>") 
def check(id): 
doc=conn.db.msg.find_one({'_id':bson.ObjectId(oid=str(id))}) 
return render_template('base.html',name=doc) 

risposta

29

si potrebbe anche provare a utilizzare ObjectId dal modulo bson.objectid, in questo modo:

from bson.objectid import ObjectId 

In tal caso, non sarà necessario fornire il kwarg oid. Ti basta fare qualcosa di simile:

db_conn.msg.find_one({'_id': ObjectId(my_oid)}) 
+0

ho cercato pymongo.objectid (id) e non ha funzionato ... ora so perché .... Grazie – Altons

+0

Glad you got it lavoro! – aezell

+0

A proposito, stiamo aggiornando la documentazione PyMongo per la prossima release di mettere in guardia la gente su questa trappola: https://github.com/mongodb/mongo-python-driver/commit/dcf546f0b08e59d0d2c4f09a08fd9fe07017256a Speranza che aiuta. –

Problemi correlati