0

我在 mongo db 中保存了一个令牌,例如 .

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==")
}

当我在 mongo db 命令行界面中执行时,上述查询工作正常。

当我尝试在 Django 视图中运行时相同的查询。

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,因为您试图uuid从不具有该属性的对象中获取该属性。在使用 Javascript 的 Mongo shell 中,它转换为以下查询:

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 回答