私は Web アプリを構築しています。このアプリ (Codeigniter と MongoDB) では、人々がタグでファイルを検索できるようにしています。たとえば、タグ house と cat を入力すると、それらに一致するすべてのファイルが取得されます。タグは配列 ($tags) にまとめられます。
これは私が検索クエリを行う方法です:
select ($select) -> where_in_all ('tags', $tags) -> get ('uploaded_files');
上記のクエリは正常に機能しますが、ユーザーが部分的なタグで検索できるようにする必要があります。「家」ではなく「ほう」のように。like クエリを作成する方法は知っていますが、一度に 1 つのタグに対してのみです。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 に更新したところ、正常に動作するようになりました。