1

我正在构建一个网络应用程序,在这个应用程序(Codeigniter 和 MongoDB)中,我让人们按标签搜索文件。例如,如果他们输入标签 house 和 cat,他们会得到所有匹配它们的文件。标签被收集在一个数组($tags)中。

这就是我执行查找查询的方式:

select ($select) -> where_in_all ('tags', $tags) -> get ('uploaded_files');

上面的查询工作正常,但我真的需要让用户按部分标签搜索。像“侯”而不是“房子”。我知道如何进行类似查询,但一次只针对一个标签。如何使 in_array 搜索工作?

我正在使用 vesparny 出色的 MongoDB 包装器。这是该包装器中用于正常 in_array 搜索的代码:

public function where_in_all($field = "", $in = array()){
   $this->_where_init($field);
   $this->wheres[$field]['$all'] = $in;
   return ($this);
}

这是我修改它的尝试,但它不起作用:

public function where_in_all_like($field = "", $in = array()){
   $this->_where_init($field);
   $this->wheres[$field]['$all'] = new MongoRegex('/'.$in.'/i');
   return ($this);
}

我究竟做错了什么?包装器可以在这里找到:

https://github.com/vesparny/cimongo-codeigniter-mongodb-library

感谢所有帮助!

更新

这似乎只在我的本地服务器上有效......不在生产服务器上。

public function where_in_all_like($field = "", $in = array()){

    $newarray = array ();

    foreach ($in as $value) {
     array_push ($newarray, new MongoRegex('/'.$value.'/i'));
    }

    $this->_where_init($field);
    $this->wheres[$field]['$all'] = $newarray;
    return ($this);
    }

更新 2

我将服务器上的 MongoDB 更新为 2.0.4,现在可以正常工作了。

4

0 回答 0