我使用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],"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',消息'$和/ $或/ $也必须是非空数组'
所以,我需要一个动态构建查询的函数,然后工作:)。
答案 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++;
}