我正在使用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],"description.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++;
}