我正在构建一个网络应用程序,在这个应用程序(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,现在可以正常工作了。