【发布时间】:2016-01-14 17:04:32
【问题描述】:
我正在对文档中的多个字段进行超级简单的搜索,以查看其中是否有单个值。 (注意:某些字段使用正则表达式来搜索值是否包含在字符串中)。使用查询生成器,我构建了以下内容。
public function search($value, $limit, $offset=0, $orderby = '', $order='' )
{
$regexVal = new \MongoRegex('/^.*(\b'.str_replace(' ', '\s', $value).'\b).*?$/i');
$query = $this->repository->createQueryBuilder();
$query->addOr($query->expr()->field('location')->equals($regexVal));
$query->addOr($query->expr()->field('mappedData.name')->equals($regexVal));
$query->addOr($query->expr()->field('mappedData.first_name')->equals($regexVal));
$query->addOr($query->expr()->field('mappedData.last_name')->equals($regexVal));
$query->addOr($query->expr()->field('mappedData.email')->equals($value));
$query->addOr($query->expr()->field('email')->equals($value));
$query->addOr($query->expr()->field('organization')->equals($value));
$query->limit($limit)
->skip($offset);
if( ! empty($orderby) && $order ){
$query->sort($orderby, $order);
}
return $query->getQuery()->execute();
}
如果我转储构造的查询值,我会在这个要点中得到以下数组。 https://gist.github.com/jchamb/04a0400c989cd28b1841 Doctrine Filter 正在添加额外的关联字段。
通过查询生成器我没有得到任何结果,但是如果我自己构建查询并在像 genghis 这样的管理应用程序中运行它,我会得到预期的单个文档结果。
实际编写的 mongodb 字符串是这样的。 https://gist.github.com/jchamb/ce60829480576a88290d
这个项目是一个 zend2 应用程序,已经使用了学说和 mongo。一般来说,我不是 mongo 的专家,所以我不确定我在 Query Builder 内部做错了什么,我没有得到与直接执行查询相同的结果。我也找不到任何关于堆栈或查询生成器文档的信息,这些信息也为多个 addOrs 语法提供了任何额外的线索。
非常感谢任何帮助或指导,在最基本的形式中,我需要查询生成器来获取关联 = x 和(field1 = val 或 field2 = value)的文档。
谢谢!
【问题讨论】:
标签: mongodb doctrine-orm zend-framework2 query-builder