使用PHP中的MongoDB进行in_array查询

时间:2012-05-09 06:47:33

标签: codeigniter mongodb mongodb-php

我正在构建一个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,现在工作正常。

0 个答案:

没有答案