2015-06-06 2 views
2

MongoDBФильтрация/подзапрос, чтобы получить результаты

db.entity.find() 
{ 
     "_id" : ObjectId("5563a4c5567b3104c9ad2951"), 
     "section" : "section1", 
     "chapter" : "chapter1", 
     ... 
}, 
{ 
     "_id" : ObjectId("5563a4c5567b3104c9ad2951"), 
     "section" : "section1", 
     "chapter" : "chapter2", 
     ... 
},.... 

В моей базе данных, коллекции entity содержат в основном section и chapter. Только значения chapter уникальны, и когда мы запрашиваем mongo для данного раздела, он возвращает несколько результатов (один раздел соответствует многим главам).

Что мне нужно сделать, так это получить все коллекции данного раздела, это так просто.

settings.py

URL_PREFIX = "api" 

API_VERSION = "v1" 

ALLOWED_FILTERS = ['*'] 

schema = { 
    'section': { 
     'type': 'string', 
    }, 
    'chapter': { 
     'type': 'string', 
    }, 
} 

entity = { 
    'item_title': 'entity', 
    'resource_methods': ['GET'], 

    'cache_control': '', 
    'cache_expires': 0, 

    'url': 'entity/<regex("\w+"):section>/section', 

    'schema': schema 
} 

DOMAIN = { 
    'entity': entity, 
} 

run.py

from eve import Eve 

if __name__ == '__main__':      
    app.run(debug=True) 

То, что я пытался

curl -L -X GET -H 'Content-Type: application/json' http://127.0.0.1:5000/api/v1/entity/23/section 

ВЫВОД

{ 
    "_status": "ERR", 
    "_error": { 
    "message": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.", 
    "code": 404 
    } 
} 

Что я делаю неправильно? Как я могу получить все объекты из одного раздела?

ответ

1

ли вы пытаетесь написать URL, как это:

http://127.0.0.1:5000/api/v1/entity?where=section=='section32' 

Пожалуйста, посмотрите на это python-eve.org/features.html#filtering

+0

Thx работает как шарм !! – smarber

0

Try с:

curl -H 'Accept: application/json' http://127.0.0.1:5000/api/v1/entity/section23/section 

Вы хотите использовать section23 в свой адрес, так это то, что соответствует как регулярное выражение и фактическое значение, хранящееся в базе данных.

Вы также можете изменить URL на:

'url': 'entity/<regex("\w+"):section>' 

Который позволит URLs, как это:

http://127.0.0.1:5000/api/v1/entity/section23 

Что, вероятно, более семантическим. Надеюсь это поможет.

+0

Thx для вашего anwser, но это Безразлично» t изменить что-либо, выход по-прежнему 'Запрошенный URL-адрес не найден на сервере ...': /. – smarber

+0

Я действительно протестировал вашу установку на чистом virtualenv, и, учитывая изменения, которые я предлагаю, он отлично работает с моей стороны. Может быть, что-то неуместно/неправильно сконфигурировано? –

+0

Не знаю, почему он не работает для меня:/ – smarber

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