16

次の問題で困っています。

Flask、flask-pymongo 拡張機能、mongodb バージョン v2.2.0-rc0、pdffile バージョン 4.5 を使用しています。

これは私のルートです:

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

id は msg コレクション内のドキュメントからの有効な _id ですが、常に None を返します。

私が試してみました:

  • ObjectId(id) を渡しますが、errortype を返します: ObjectId は呼び出し可能ではありません
  • id を str(id) として渡すと None が返されます

何かご意見は?

更新: これは、完全な URL がどのように見えるかです:

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

更新 2:

ruby の (answer) で同様の質問を見つけました。どうすればそれを Python に変換できるかわかりません。どのような種類のインポート/モジュールが必要ですか?

_id でドキュメントを取得するにはどうすればよいですか?

UPDATE3:私は試しました:

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)

しかし、私はTypeError: 'module' object is not callableを取得します(id でも動作しません)

1500に到達したら、フラストレーションタグを提案します:-S

更新 4:

ついに私はそれを起動して実行しました!

ここに私の解決策があります:

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)
4

1 に答える 1

32

次のようにObjectId、モジュールから使用することもできます。bson.objectid

from bson.objectid import ObjectId

その場合、oidkwarg を提供する必要はありません。次のようにします。

db_conn.msg.find_one({'_id': ObjectId(my_oid)})
于 2012-08-30T14:50:55.183 に答える