我正在构建一个Web应用程序,在这个应用程序(Codeigniter和MongoDB)中,我让人们按标签搜索文件。例如,如果他们进入标签房子和猫,他们会得到与之匹配的所有文件。标签收集在一个数组($ tags)中。
这就是我查找查询的方式:
select ($select) -> where_in_all ('tags', $tags) -> get ('uploaded_files');
上面的查询工作正常,但我真的需要让用户通过部分标签进行搜索。喜欢“hou”而不是“house”。我知道如何进行类似的查询,但一次只能查找一个标签。如何使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,现在工作正常。