首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php只使用4种标准

php只使用4种标准
EN

Stack Overflow用户
提问于 2012-05-14 03:29:13
回答 1查看 397关注 0票数 5

我的标准通过GET参数传递,并被放置到$data (作为assc数组)中。然后到下面的部分,每个搜索项都变得不完全匹配。在此之后,我们删除(未设置)空准则。

总共可能有15个字段,这些字段至少有1个,最多可以设置所有15个字段。

代码语言:javascript
复制
foreach ($data as $k => $v) { 
     // Make them partial match
     $data[$k] = new MongoRegex('/'.$v.'/i');
     // Remove empty criteria
     if (empty($v)) unset($data[$k]); 
}
// Run the search
$cursor = $this->collection->find($data);

只要已经通过的标准是4或更少,一切都是甜蜜的:

代码语言:javascript
复制
Array ( 
   [phone] => MongoRegex Object ( [regex] => 433 [flags] => i ) 
   [property_name] => MongoRegex Object ( [regex] => west [flags] => i ) 
   [city] => MongoRegex Object ( [regex] => H [flags] => i ) 
   [zip_postcode] => MongoRegex Object ( [regex] => 9 [flags] => i ) 
)

这将返回5个结果。

但是,在第四个标准之后添加的任何标准都是无效的。

代码语言:javascript
复制
Array ( 
   [phone] => MongoRegex Object ( [regex] => 433 [flags] => i ) 
   [state_province] => MongoRegex Object ( [regex] => Virginia [flags] => i ) 
   [property_name] => MongoRegex Object ( [regex] => west [flags] => i ) 
   [city] => MongoRegex Object ( [regex] => H [flags] => i ) 
   [zip_postcode] => MongoRegex Object ( [regex] => 9 [flags] => i )
)

这应该返回2,但仍然返回5,并且不管添加了多少条件项,它都将返回5。

-更新 --

所以我已经在壳牌上试过了,令我惊讶的是,它在那里也不起作用。

代码语言:javascript
复制
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/}).count()

返回5

现在,当我添加第5个参数时,应该将结果缩小到2,但是它是无效的,仍然显示为5!

代码语言:javascript
复制
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/, state_province:/Virginia/}).count()

返回5

通过大量的实验,我意识到这仅仅是最初的4个标准被采纳!!就像在最后一个例子中,我切换了'state_province''city'的位置,它将是“城市”标准,这将是无效的,因为它将是第5个标准!!

-新更新版 --

结果是,如果我使用的是正常匹配,而不是第五条标准上的正则表达式,那么它就会工作。我是否正确地假设Mongo只能为4种正则表达式找到()?因此,这将正确地返回1

代码语言:javascript
复制
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/, state_province:Virginia}).count()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 01:14:29

每个查询都有4个允许的正则表达式条件的硬限制。大约六个月前,它被修正在核心的mongo代码中:https://github.com/mongodb/mongo/commit/62554d064a264f9b6c28099ba71421f250bbbba9

看起来这个修复程序还没有被拖到mongo的1.8或2.0分支中,下面的v1.8分支显示了硬限制:https://github.com/mongodb/mongo/blob/v1.8/db/matcher.cpp#L159

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10577210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档