PHP - Mongo - $or


PHP - Mongo - $or

我正在使用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)?

目前用于手动查询的内容不起作用(我有一种感觉,这是因为在某些条目中描述.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必须是非空数组"

因此,我需要一个函数来动态构建查询,并:)工作。

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

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

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

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

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