Codeigniter 基于用户输入构造查找查询。正确的方法

Codeigniter 基于用户输入构造查找查询。正确的方法,codeigniter,mongodb,Codeigniter,Mongodb,我正在使用Codeigniter和MongoDB开发一个web应用程序。 我需要创建一个使用以下标准搜索数据库的函数 标签 所有者用户名 地位 日期范围 它需要足够灵活,以便用户只按标签或状态进行搜索,而忽略其他标准 现在我正在使用if-else结构来处理不同的查询,这些查询反映了所选的 标准。例如下面的代码。这是非常糟糕的方式,因为我需要创建 匹配所有可能组合的查询 if ($args['status']) { $this->mongo_db->select ($sele

我正在使用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中没有更好的搜索方法吗?

为什么不基于用户输出创建查询,然后使用它从MongoDB获取数据呢。下面是伪代码

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

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

... etc

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

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

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

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

... etc

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

我不知道你到底是什么意思。我想避免if/else其他方面的组合太多,因为我有6个标准,它们可以根据用户喜好混合。啊,不,我想我知道你的意思。是否添加到数组查询(如果存在)?如何在PHP中以最佳方式实现这一点?是的,动态构建数组并将其作为查询对象传递。遗憾的是,我不知道如何在PHPIs中做得更好,因为有可能对这个查询进行类似的操作:where_lt“created_at”,new MongoDate strotime$args['date_to']->不确定您的确切意思。我想避免if/else其他方面的组合太多,因为我有6个标准,它们可以根据用户喜好混合。啊,不,我想我知道你的意思。是否添加到数组查询(如果存在)?如何在PHP中以最佳方式实现这一点?是的,动态构建数组并将其作为查询对象传递。可悲的是,我不知道如何在PHPIs中做得更好。有可能对这个查询做一些类似的事情:where_lt“created_at”,new MongoDate strotime$args['date_to']->