PHP MongoDB查找,带有多个;及;条件
经过数小时的实验和阅读,我无法找到解决这个问题的方法: 我想使用多个AND条件执行PHP MongoDB查找,带有多个;及;条件,php,mongodb,Php,Mongodb,经过数小时的实验和阅读,我无法找到解决这个问题的方法: 我想使用多个AND条件执行MongoDB->find($query) 例如,假设我想要id=5,a2,b>10,b数组( 排列( “id”=>5, “a”=>数组(“$gt'=>2,$lt'=>6), “b”=>数组(“$gt'=>10,$lt'=>20) ) ) ); $docs=$coll->find($condition); foreach($o=>$doc形式的文档){ echo json_编码($doc); } 以上仅返回第一个
MongoDB->find($query)
例如,假设我想要id=5,a<6,a>2,b>10,b<20
我希望$query是:
$query = array("id" => 5,
"a" => array('$gt' => 2,
'$lt' => 6),
"b" => array('$gt' => 10,
'$lt' => 20))
但这会返回带有我的DB的空结果
我尝试了各种语法,例如:
$query = array("id" => 5,
array( "a" => array('$gt' => 2,
'$lt' => 6),
"b" => array('$gt' => 10,
'$lt' => 20)))
但这也失败了
还尝试了“$和”
变体,但运气不佳
是否可以在PHP MongoDB
find()
请求中“混合”几个和条件?我刚刚使用MongoDB PHP驱动程序v1.6.11(PHP-5.5.9)测试了这一点。测试数据如下所示
db.collection.insert({id:5,a:4,b:15})
insert({id:9,a:4,b:15})
insert({id:5,a:4,b:20})
使用PHP代码段:
$condition=array(
“$和”=>数组(
排列(
“id”=>5,
“a”=>数组(“$gt'=>2,$lt'=>6),
“b”=>数组(“$gt'=>10,$lt'=>20)
)
)
);
$docs=$coll->find($condition);
foreach($o=>$doc形式的文档){
echo json_编码($doc);
}
以上仅返回第一个文档示例。这表明,$和
应按预期工作。我也在没有$和的情况下进行了测试,即:
$condition=array(
“id”=>5,
“a”=>数组(“$gt'=>2,$lt'=>6),
“b”=>数组(“$gt'=>10,$lt'=>20)
);
这也是同样的道理。尝试检查您的数据集,看是否有与您的条件匹配的文档 我刚刚使用MongoDB PHP驱动程序v1.6.11(PHP-5.5.9)测试了这一点。测试数据如下所示
db.collection.insert({id:5,a:4,b:15})
insert({id:9,a:4,b:15})
insert({id:5,a:4,b:20})
使用PHP代码段:
$condition=array(
“$和”=>数组(
排列(
“id”=>5,
“a”=>数组(“$gt'=>2,$lt'=>6),
“b”=>数组(“$gt'=>10,$lt'=>20)
)
)
);
$docs=$coll->find($condition);
foreach($o=>$doc形式的文档){
echo json_编码($doc);
}
以上仅返回第一个文档示例。这表明,$和
应按预期工作。我也在没有$和的情况下进行了测试,即:
$condition=array(
“id”=>5,
“a”=>数组(“$gt'=>2,$lt'=>6),
“b”=>数组(“$gt'=>10,$lt'=>20)
);
这也是同样的道理。尝试检查您的数据集,看是否有与您的条件匹配的文档 此问题已解决:数据库中的值类型错误(字符串而不是float/double)。在数据库中更新到正确的类型时按预期工作 此问题已解决:数据库中的值类型错误(字符串而不是float/double)。在数据库中更新到正确的类型时按预期工作 我不是SME,但MondoDB是MongoDB上的一个拼写错误吗?@MartinCowie当然,修正了!Thx.我不是SME,但MondoDB是MongoDB上的一个拼写错误吗?@MartinCowie,当然,修正了!谢谢你检查这个。我已经发现问题是值的类型不正确。它们是字符串,而不是float(双精度)。使用正确的类型更新数据库后,它将按预期工作。感谢您检查此项。我已经发现问题是值的类型不正确。它们是字符串,而不是float(双精度)。使用正确的类型更新数据库后,它将按预期工作。