0

のようなトークンをmongodbに保存しています。

db.user.findOne({'token':'7fd74c28-8ba1-11e2-9073-e840f23c81a0'}['uuid'])
{
    "_id" : ObjectId("5140114fae4cb51773d8c4f8"),
    "username" : "jjj51@gmail.com",
    "name" : "vivek",
    "mobile" : "12345",
    "is_active" : false,
    "token" : BinData(3,"hLL6kIugEeKif+hA8jyBoA==")
}

上記のクエリは、mongodbコマンドラインインターフェイスで実行すると正常に機能します。

Djangoviewlikで実行しようとしているときの同じクエリ。

get_user = db.user.findOne({'token':token}['uuid'])
or `get_user = db.user.findOne({'token':'7fd74c28-8ba1-11e2-9073-e840f23c81a0'}['uuid'])`

エラーが発生します

KeyError at /activateaccount/
'uuid'

このエラーが発生する理由を教えてください。

私のデータベース

 db.user.find()
{ "_id" : ObjectId("5140114fae4cb51773d8c4f8"), "username" : "ghgh@gmail.com", "name" : "Rohit", "mobile" : "12345", "is_active" : false, "token" : BinData(3,"hLL6kIugEeKif+hA8jyBoA==") }
{ "_id" : ObjectId("51401194ae4cb51773d8c4f9"), "username" : "ghg@gmail.com", "name" : "rohit", "mobile" : "12345", "is_active" : false, "token" : BinData(3,"rgBIMIugEeKQBuhA8jyBoA==") }
{ "_id" : ObjectId("514012fcae4cb51874ca3e6f"), "username" : "ghgh@gmail.com", "name" : "rahul", "mobile" : "8528256", "is_active" : false, "token" : BinData(3,"f9dMKIuhEeKQc+hA8jyBoA==") }
4

1 に答える 1

0

TL;DRクエリに誤りがあります。

より長い説明:

{'token':'7fd74c28-8ba1-11e2-9073-e840f23c81a0'}['uuid']

そのプロパティを持たないオブジェクトからundefinedプロパティを取得しようとしているためです。uuidJavascript を使用する Mongo シェルでは、次のクエリに変換されます。

db.user.findOne(undefined)

ランダムな結果が得られます (まあ、それほどランダムではありませんが、おそらく最初の結果です)。

辞書から不明なキーを取得しようとする場合、Python はもう少し厳密です。

{'token':token}['uuid']

uuidはディクショナリ内の有効なキーではないため、アクセスしようとすると が返されます{'token':token}KeyError

編集: PythonUUID型を使用してトークンをデータベースに格納したため、クエリでも同じ型を使用する必要があります。

from uuid import UUID

token = '7fd74c28-8ba1-11e2-9073-e840f23c81a0'
get_user = db.user.find_one({'token' : UUID(token) })
于 2013-03-13T07:01:23.843 に答える