2013-03-12 3 views
0

Только что начал с mongo db.Python MongoDB: Объект 'Курсор' не имеет атрибута 'name'

context = {} 
if request.method == 'POST': 
    context['name'] = request.POST['name'] 
    context['username'] = request.POST['username'] 
    context['mobile'] = request.POST['mobile'] 
    get = db.messages.find({ 'name' : request.POST['name'] }) 
    if get is not None: 
     print get.name 

У меня есть две записи в моей базе данных.

> db.messages.find() 
{ "_id" : ObjectId("513f2cf1ae4cb53c1374b4f6"), "username" : "[email protected]", "mobile" : "78978555", "name" : "rohit" } 
{ "_id" : ObjectId("513f2cfeae4cb53c1374b4f7"), "username" : "[email protected]", "mobile" : "8528522", "name" : "Rohti" } 

Когда я отправляю форму с именем rohit. Я получаю вышеуказанную ошибку.

Пожалуйста, сообщите мне, что я могу сделать неправильно здесь.

Я знаю, что делаю неправильный запрос в mongo db. Пожалуйста, помогите мне вернуться на правильный путь.

+0

Что получается, когда вы печатаете его? – Hoopdady

ответ

3

получить возврат как курсор в pymongo.

попробовать:

for record in get: 
    print record['name'] 

Кроме того, получить не хорошее имя для переменной.

+0

спасибо, что это работает для меня. Но что, если я хочу проверить только для одной записи. Должен ли я делать то же самое для FindOne? – masterofdestiny

+0

find_one возвращает dict, поэтому вам не нужно выполнять итерацию, но можете напрямую обращаться к нему: 'x = find_one ({'name': your_name})' then' print x ['name'] ' – glormph

+0

последнее, что если нет соответствующего запроса, который он возвращает None или что? – masterofdestiny

1

Вы должны итерация с курсором:

for element in get: 
    print(element.name) 

теперь вы обращаетесь курсор, который является только генератором элементов и не содержит имя непосредственно. См. here для получения полного объяснения.

+0

Выше запрос также будет работать print (element.name) вместо print (get.name) – masterofdestiny

+0

Да, конечно, исправлено :) – Jacopofar

Смежные вопросы