PHP - Mongo - $或

时间:2012-06-12 17:07:23

标签: php mongodb

我使用PHP / Mongo查询如下数据集:

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

  ...

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

如何在php中编写一个函数,它将构建一个动态查询,使用$或基于描述键的数量(0 ... n)搜索40级及以上的级别?

我目前手动查询的内容不起作用(我感觉这是因为在某些条目中描述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]}})

它给了我一个错误:

  

致命错误:未捕获的异常'MongoCursorException',消息'$和/ $或/ $也必须是非空数组'

所以,我需要一个动态构建查询的函数,然后工作:)。

2 个答案:

答案 0 :(得分:6)

$or查询的值本身应该是一个数组。 {$or : [...]}

请参阅MongoDB documentation中的标准示例。

您可能还希望使用$in(或组合的$lt$gt)等运算符来选择您感兴趣的描述级别,而不是枚举每个值

答案 1 :(得分:3)

对于那些感兴趣的人,这是我对这个问题的最终代码(有效)。

$y = 0;
$descriptionLevels = 10; // set to 'n' levels as needed ...
while($y < $descriptionLevels){
    $filter['$or'][]['description.' . $y . '.level']['$in'] = range($startLevel, $endLevel);
    $y++;
}