2012-01-31 15 views
2

私はCodeigniterとMongoDBを使ってWebアプリケーションを開発しています。 次の基準を使用してデータベースを検索する関数を作成する必要があります。ユーザー入力に基づいて検索クエリを作成します。正しい方法

  • タグ
  • 所有者のユーザー名
  • ステータス
  • 日付範囲

これにより、ユーザーは、たとえばタグのみまたはステータスで検索すると、他のcriteriasを除外するのは十分に柔軟である必要があります。

現在、私は選択された 基準を反映する異なるクエリを使用してelse構造を使用しています。たとえば、以下のコード。これは非常に悪い方法です。なぜなら、可能なすべての組み合わせに一致するクエリを 作成する必要があるからです。

if ($args['status']) { 

    $this->mongo_db->select ($select)-> 
    where('user_name', $args['username']) -> 
    where ('status', $args['status']) -> 
    where_in_all ('file_tags', $tags) -> 
    limit ($limit) -> 
    offset ($offset) -> 
    get ('files'); 

} else { 

    $this->mongo_db->select ($select)-> 
    where('user_name', $args['username']) -> 
    where_in_all ('file_tags', $tags) -> 
    limit ($limit) -> 
    offset ($offset) -> 
    get ('files'); 

} 

MongoDBで検索するより良い方法はありますか?

答えて

4

なぜユーザー出力に基づいてクエリを作成し、後でmongoDbからデータを取得したいのですか。以下は擬似コード

if (status) { 
    query.put(status, status) 
} 

if (tags) { 
    query.put(tags, tags) 
} 

... etc 

mongo_db->select ($query) - > limit -> offet -> get 
+0

正確な意味は不明です。私は6つの基準を持っているので、/他の賢明な組み合わせがあまりにも多すぎることを避けたいと思うし、それらはユーザーの好みのために混在することができます。 –

+0

ああ、私はあなたが何を意味するか知っていると思う。配列(クエリ)が存在する場合はそれを追加しますか?どのように私はPHPで最善の方法でそれを行うだろうか? –

+0

はい、動的配列を構築し、それをクエリオブジェクトとして渡します。悲しいことに、私はPHPでそれをより良くする方法はありません – Anton

関連する問題