2012-08-29 17 views
15

Estoy desconcertado con el siguiente problema.Documento de búsqueda en MongoDB por _id usando la extensión Flask-pymongo

estoy usando frasco, matraz de extensión pymongo, mongodb versión v2.2.0-rc0, pdfile versión 4.5

Esta es mi ruta:

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

la identificación es un _id válida de un documento en la colección de msg, pero SIEMPRE devuelve None.

que he intentado:

  • pasing la OBJECTID (id) pero devuelve errortype: no exigible OBJECTID
  • pasing el id como str (id) devuelve Ninguno

¿Alguna idea?

ACTUALIZACIÓN: esta forma la URL completa se parece a:

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

Update2:

me encontré con una pregunta similar (respuesta) de rubí. No estoy seguro de cómo puedo traducirlo a Python, ¿qué tipo de importaciones/módulos necesito?

How can I retrieve a document by _id?

Update3: me trataron:

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) 

pero consigo TypeError: Objeto de 'módulo' no es exigible (no trabaja con id tampoco)

cuando llegó a 1500 Sugeriré una frustation etiqueta: -S

ACTUALIZACIÓN4:

Finalmente lo conseguí & funcionando!

aquí está mi solución:

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) 

Respuesta

29

También podría intentar usar ObjectId del módulo bson.objectid, así:

from bson.objectid import ObjectId 

En ese caso, usted no tendrá que proporcione el kwarg oid. Sólo te va a hacer algo como esto:

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

me trataron pymongo.objectid (id) y no funcionaba ... ahora sé por qué .... Gracias – Altons

+0

Me alegro de que tengo trabajo! – aezell

+0

Por cierto, estamos actualizando los documentos PyMongo para la próxima versión de advertir a la gente acerca de este escollo: https://github.com/mongodb/mongo-python-driver/commit/dcf546f0b08e59d0d2c4f09a08fd9fe07017256a Espero que ayude. –

Cuestiones relacionadas