3

PHP/Mongo を使用して、次のようなデータ セットをクエリしています。

{
  description:
  {
    0:
      {level: (some int 0-50)},
    1:
      {level: (some int 0-50)},

  ...

    n:
      {level: (some int 0-50)}
   }
 }

$or を使用し、説明キーの数 (0 ... n) に基づいて、レベル 40 以上を検索する動的クエリを作成する関数を PHP で作成するにはどうすればよいですか?

現在、手動クエリで使用しているものは機能していません (一部のエントリで description.1、2、3 が存在しないためだと感じています)。

find("$or":{"description.0.level":[40,41,42,43,44,45,46,47,48,49,50],"descriptio‌​n.1.level":[40,41,42,43,44,45,46,47,48,49,50],"description.2.level":[40,41,42,43,‌​44,45,46,47,48,49,50],"description.3.level":[40,41,42,43,44,45,46,47,48,49,50]}})

それは私にエラーを与えます:

致命的なエラー:「$and/$or/$nor は空でない配列である必要があります」というメッセージを含むキャッチされない例外「MongoCursorException」

したがって、クエリを動的に構築し、機能する関数が必要です:)。

4

2 に答える 2

6

クエリの$or値自体は配列である必要があります。 {$or : [...]}

MongoDB ドキュメントの標準的な例を参照してください。

各値を列挙するのではなく、$in(または$ltandの組み合わせで)などの演算子を使用して、関心のある説明レベルを選択することもできます。$gt

于 2012-06-12T19:02:09.783 に答える
3

興味のある方のために、これがこの問題に対する私の最終的なコードです(動作します)。

$y = 0;
$descriptionLevels = 10; // set to 'n' levels as needed ...
while($y < $descriptionLevels){
    $filter['$or'][]['description.' . $y . '.level']['$in'] = range($startLevel, $endLevel);
    $y++;
}
于 2012-06-19T17:14:24.387 に答える