gpt4 book ai didi

php - 如何进行 OR 搜索

转载 作者:IT老高 更新时间:2023-10-28 13:29:51 26 4
gpt4 key购买 nike

我想搜索部分名字和姓氏匹配 - 例如在 sql 中

f_name LIKE J%   OR  l_name LIKE S%   

将匹配 John Smith 或 John Henry 或 Harry Smith 。

我假设我可能需要使用“$or”运算符,

到目前为止,我有这个,我相信它正在正确地执行 LIKE % 部分,但我相信它正在执行“AND”搜索(意味着它搜索 f_name LIKE J% AND l_name LIKE S% 所以它只会匹配 John史密斯):

$name1="J";
$name2="S";
$cursor = $this->clientCollection->find(array('f_name' => new MongoRegex('/^'.$name1.'/i'), 'l_name' => new MongoRegex('/^'.$name2.'/i') ));

注意:这将匹配包含在 %J% 中的内容

MongoRegex('/'.$name1.'/i')

这将匹配以(注意添加的 ^)开头,如 J%

MongoRegex('/^'.$name1.'/i')

最佳答案

$or 接受一个子句数组,因此您基本上只需要在当前查询周围包装另一个数组:

array('$or' => array(
array('f_name' => new MongoRegex('/'.$name1.'/i')),
array('l_name' => new MongoRegex('/'.$name2.'/i'))
));

编辑:前面的示例错过了一组内部 array() 调用。

我发布的原始错误示例如下所示:

array('$or' => array(
'f_name' => new MongoRegex('/'.$name1.'/i'),
'l_name' => new MongoRegex('/'.$name2.'/i')
));

这是一个有效的查询,但不是一个有用的查询。本质上, f_namel_name 查询部分仍然是 ANDed 在一起,所以 $or 部分是无用的(它只通过一个查询,所以这与单独运行该查询相同)。

至于您在评论中提到的替代方案,该替代方案不起作用,因为查询中的最外层数组必须是关联数组。之所以会出现这种困惑,是因为 Mongo 的查询语法类似于 JSON,并且混合使用了对象和数组,但是这两种结构在 PHP 中都由数组表示。 PHP Mongo 驱动程序基本上将 PHP 关联数组转换为 JSON 对象({ ... }),并将“普通” PHP 数组转换为 JSON 数组([ ... ]) .

实际结果是,“普通”PHP 数组通常仅在关联数组中有效,例如在为一个字段指定多个值时。以下示例来自 PHP Mongo manual显示查询中“正常”数组的有效用法:

$cursor = $collection->find(array("awards" => array('$in' => array("gold", "copper"))));

关于php - 如何进行 OR 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com