gpt4 book ai didi

php - 将 mongo 查询转换为 php mongo

转载 作者:搜寻专家 更新时间:2023-10-30 22:16:16 29 4
gpt4 key购买 nike

我正在使用 mongodb 构建一个基本的搜索引擎,我已经验证了基本查询在 mongo shell 中的工作。不过,我不太明白如何将其翻译成 PHP。

输入字符串中的空格表示“和”运算符和 |或管道字符是“或”运算符。输入查询发生了变化,但可能是以下几行(减去引号!):

'o g|ra'

这相当于写:

(o&&g)||(ra)

基本的 mongo 查询(请注意,我并不是每次都尝试翻译这个确切的查询,我需要它在 $ands 和 $ors 的数量方面具有灵 active )。已经测试过了,它工作正常:

db.scores.find({$or:[{Title:/o/i, Title: /g/i},{Title:/ra/i}])

我用 PHP 生成的代码是这样的:

if(strstr($textInput, '|') != FALSE)
{
foreach($orArray as $item)
{
$itemMod = explode( " " , $item);
array_push($stringArray, $itemMod);
}

$masterAndQueryStack = array();

foreach ($stringArray as $varg)
{
$multiAndQuerySet = array();

foreach ($varg as $obj)
{
$searchText = '/'. $obj .'/i';
$regexObj = new MongoRegex( $searchText ) ;
$singleQuery = array('Title' => $regexObj);
array_push($multiAndQuerySet , $singleQuery);
}
array_push($masterAndQueryStack , $multiAndQuerySet);

}

$orAndQueryStack = array('$or' => $masterAndQueryStack);
return $orAndQueryStack ;
}

这是 PHP 代码返回的查询,您可以看到 和 术语已放入数组中。如果不将它们推送到数组,我看不到任何存储它们的方法,但是似乎 mongodb 的 $or 不喜欢接受数组,我只是不确定如何重新设计搜索算法来解决这个问题。

Array 
(
[$or] => Array
(
[0] => Array
(
[0] => Array ( [Title] => MongoRegex Object ( [regex] => o [flags] => i ) )
[1] => Array ( [Title] => MongoRegex Object ( [regex] => g [flags] => i ) )
)
[1] => Array
(
[0] => Array ( [Title] => MongoRegex Object ( [regex] => ra [flags] => i ) )
)
)
)

最佳答案

为了进一步解释我的评论,我将向您介绍 $and 运算符:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and

您可以将其嵌套在您的第一个 $or 中:

Array 
(
[$or] => Array
(
[0] => Array
(
[$and] => Array
(
[0] => Array ( [Title] => MongoRegex Object ( [regex] => o [flags] => i ) )
[1] => Array ( [Title] => MongoRegex Object ( [regex] => g [flags] => i ) )
)
)
[1] => Array
(
[Title] => MongoRegex Object ( [regex] => ra [flags] => i )
)
)
)

就像那样。您还可以在正则表达式中执行 $and 查询,这里有一些关于正则表达式语法的信息:http://www.regular-expressions.info/refadv.html

关于php - 将 mongo 查询转换为 php mongo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11862402/

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