经过数小时的实验和阅读,我找不到解决这个问题的方法:
我想要使用多个AND条件进行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))
但是这会使用我的数据库返回空结果
我尝试了各种语法,例如:
$query = array("id" => 5,
array( "a" => array('$gt' => 2,
'$lt' => 6),
"b" => array('$gt' => 10,
'$lt' => 20)))
但这也失败了。
还尝试使用"$AND"
变种,没有运气。
是否可以在PHP-MongoDB AND
请求中“混合”多个find()
条件?
答案 0 :(得分:2)
我刚刚使用MongoDB PHP驱动程序v1.6.11(PHP-5.5.9)对此进行了测试。测试数据如下
db.collection.insert({id:5, a:4, b:15})
db.collection.insert({id:9, a:4, b:15})
db.collection.insert({id:5, a:4, b:20})
使用PHP代码段:
$condition = array(
'$and' => array(
array(
"id" => 5,
"a" => array('$gt' => 2, '$lt' => 6),
"b" => array('$gt' => 10, '$lt' => 20)
)
)
);
$docs = $coll->find($condition);
foreach( $docs as $o=> $doc) {
echo json_encode($doc);
}
以上仅返回第一个文档样本。这表明$and
应该按预期工作。我还没有$and
进行测试,即:
$condition = array(
"id" => 5,
"a" => array('$gt' => 2, '$lt' => 6),
"b" => array('$gt' => 10, '$lt' => 20)
);
哪个也一样。尝试检查数据集,是否有符合条件的文档。
答案 1 :(得分:0)
此问题已关闭:DB中的错误值类型(字符串而不是float / double)。更新为更正DB中的类型时,按预期工作。