根据用户输入构建查找查询。正确的方式

时间:2012-01-31 10:44:33

标签: codeigniter mongodb

我正在使用Codeigniter和MongoDB开发一个Web应用程序。 我需要创建一个使用以下标准搜索数据库的函数。

  • 标签
  • 所有者用户名
  • 状态
  • 日期范围

它需要足够灵活,以便用户只能按标签或状态进行搜索,并忽略其他标准。

现在我正在使用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 个答案:

答案 0 :(得分:4)

为什么不想根据用户输出创建查询,稍后再使用它来从mongoDb获取数据。下面是伪代码

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

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

... etc

mongo_db->select ($query) - > limit -> offet -> get