PHP MongoDB库$gt操作符配合findOne函数查询无结果问题求助
核心问题原因
查询无结果的核心原因是MongoDB比较操作的强类型校验不匹配:
你通过substr()截取得到的$val是字符串类型,而数据库中column_name字段存储的是数值类型(整型/浮点型),不同类型的数据使用$gt做比较时无法匹配到对应文档。
解决方法
- 第一步:将截取得到的字符串值转换为和数据库字段匹配的数值类型
转整型写法:$val = (int)substr($data ,1);
转浮点型写法:$val = (float)substr($data ,1); - 第二步:再构造查询条件执行查询即可
修正后完整代码
$data =">1"; // 根据数据库字段实际存储类型选择转int或float $val = (int)substr($data ,1); $filter = ["column_name" => ['$gt' => $val]]; $test = new \MongoDB\Driver\Query($filter); $result = $collection->findOne($test);
排查建议
如果修改后仍无查询结果,可确认两点:
- 数据库中
column_name字段确实存在大于你传入数值的有效文档- 数据库字段的存储类型和你转换后的PHP变量类型完全匹配,比如字段存的是浮点型就不要转成整型比较
内容的提问来源于stack exchange,提问作者Shail
相关产品推荐
相关产品推荐

