3

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

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

  ...

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

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

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

它给了我一个错误:

致命错误:未捕获的异常 'MongoCursorException' 带有消息 '$and/$or/$nor must be a nonempty array'

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

4

2 回答 2

6

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

请参阅MongoDB 文档中的标准示例。

您可能还希望使用诸如$in(或$lt$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 回答