Построение поисковых запросов на основе пользовательского ввода.Правильный путь - PullRequest
2 голосов
/ 31 января 2012

Я занимаюсь разработкой веб-приложения с использованием Codeigniter и MongoDB.Мне нужно создать функцию для поиска в базе данных по следующим критериям:

  • Теги
  • Имя пользователя владельца
  • Статус
  • Диапазон дат

Он должен быть достаточно гибким, чтобы пользователи могли, например, выполнять поиск только по тегам или статусу и не указывать другие критерии.

Сейчас я использую структуру if else с различными запросами, которыеотражать выбранные критерии.Например код ниже.Это очень плохой способ, потому что тогда мне нужно создать запрос, соответствующий каждой возможной комбинации.

if ($args['status']) {

    $this->mongo_db->select ($select)->
    where('user_name', $args['username']) ->
    where ('status', $args['status']) ->
    where_in_all ('file_tags', $tags) ->
    limit ($limit) ->
    offset ($offset) ->
    get ('files');

} else {

    $this->mongo_db->select ($select)->
    where('user_name', $args['username']) ->
    where_in_all ('file_tags', $tags) ->
    limit ($limit) ->
    offset ($offset) ->
    get ('files');

}

Нет ли лучшего способа сделать поиск в MongoDB?

1 Ответ

4 голосов
/ 31 января 2012

Почему вы не хотите создавать запрос на основе вывода пользователя и использовать его позже для получения данных из mongoDb.Ниже псевдокод

if (status) {
  query.put(status, status)
}

if (tags) {
  query.put(tags, tags)
}

... etc

mongo_db->select ($query) - > limit -> offet -> get
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...