1

私は 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 に更新したところ、正常に動作するようになりました。

4

0 に答える 0