2013-03-13 69 views
0

我有一个令牌像mongo db一样保存。Python和MongoDb:查询在执行时不起作用

db.user.findOne({'token':'7fd74c28-8ba1-11e2-9073-e840f23c81a0'}['uuid']) 
{ 
    "_id" : ObjectId("5140114fae4cb51773d8c4f8"), 
    "username" : "[email protected]", 
    "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" : "[email protected]", "name" : "Rohit", "mobile" : "12345", "is_active" : false, "token" : BinData(3,"hLL6kIugEeKif+hA8jyBoA==") } 
{ "_id" : ObjectId("51401194ae4cb51773d8c4f9"), "username" : "[email protected]", "name" : "rohit", "mobile" : "12345", "is_active" : false, "token" : BinData(3,"rgBIMIugEeKQBuhA8jyBoA==") } 
{ "_id" : ObjectId("514012fcae4cb51874ca3e6f"), "username" : "[email protected]", "name" : "rahul", "mobile" : "8528256", "is_active" : false, "token" : BinData(3,"f9dMKIuhEeKQc+hA8jyBoA==") } 
+0

您的令牌存储为BinData() 。他们如何生成/插入到数据库中? – robertklep 2013-03-13 07:25:45

+0

@robertklep我使用Python的uuid像令牌= uuid.uuid1() 上下文['令牌'] =标记db.user.insert(上下文) – masterofdestiny 2013-03-13 07:28:19

+0

请参阅我编辑的答案。 – robertklep 2013-03-13 07:34:50

回答

0

TL; DR查询故障。

更详细的解释:

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

转化为undefined,因为你想从一个对象不具有财产取得的财产uuid。在蒙戈外壳,它使用JavaScript,这些转换为以下查询:

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) }) 
+0

什么是这个 – masterofdestiny 2013-03-13 07:03:00

+0

overcoe从您的查询中删除'['uuid']'。 – robertklep 2013-03-13 07:04:47

+0

仍然不能正常工作我已经检查过 – masterofdestiny 2013-03-13 07:05:15