我在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==") }
答案 0 :(得分: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
。
编辑,因为您已使用Python UUID
类型将令牌存储在数据库中,您还需要在查询中使用相同的类型:
from uuid import UUID
token = '7fd74c28-8ba1-11e2-9073-e840f23c81a0'
get_user = db.user.find_one({'token' : UUID(token) })