Doctrine MongoDB Query Builder addOr 查询未返回任何结果
Doctrine MongoDB Query Builder addOr query not returning any results
我正在对文档中的多个字段进行超级简单的搜索,以查看是否有任何字段具有单一值。 (注意:一些字段使用正则表达式来搜索值是否包含在字符串中)。使用查询生成器我构建了以下内容。
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
这个项目是一个已经在使用 doctrine 和 mongo 的 zend2 应用程序。一般来说,我不是 mongo 的专家,所以我不确定我在查询生成器内部做错了什么,我没有得到与直接执行查询相同的结果。我在堆栈或查询生成器文档中找不到任何信息,这些信息为 multiple addOrs 语法提供了任何额外的线索。
非常感谢任何帮助或指导,在最基本的形式中,我需要查询构建器来获取关联 = x 和(field1 = val 或 field2 = value)的文档。
谢谢!
真的不确定上面的问题到底是什么,但在尝试之后,切换查询构建器的顺序解决了问题。
public function search($value, $limit, $offset=0, $orderby = '', $order='' )
{
$regexVal = new \MongoRegex('/^.*(\b'.str_replace(' ', '\s', $value).'\b).*?$/i');
$query = $this->repository->createQueryBuilder()
->find()
->limit($limit)
->skip($offset);
$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));
if( ! empty($orderby) && $order ){
$query->sort($orderby, $order);
}
return $query->getQuery()->execute();
}
如果有人对查询生成器的内部结构有更多了解,我仍然希望听到一些反馈,说明为什么这行得通,而上面的行不通。
我正在对文档中的多个字段进行超级简单的搜索,以查看是否有任何字段具有单一值。 (注意:一些字段使用正则表达式来搜索值是否包含在字符串中)。使用查询生成器我构建了以下内容。
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
这个项目是一个已经在使用 doctrine 和 mongo 的 zend2 应用程序。一般来说,我不是 mongo 的专家,所以我不确定我在查询生成器内部做错了什么,我没有得到与直接执行查询相同的结果。我在堆栈或查询生成器文档中找不到任何信息,这些信息为 multiple addOrs 语法提供了任何额外的线索。
非常感谢任何帮助或指导,在最基本的形式中,我需要查询构建器来获取关联 = x 和(field1 = val 或 field2 = value)的文档。
谢谢!
真的不确定上面的问题到底是什么,但在尝试之后,切换查询构建器的顺序解决了问题。
public function search($value, $limit, $offset=0, $orderby = '', $order='' )
{
$regexVal = new \MongoRegex('/^.*(\b'.str_replace(' ', '\s', $value).'\b).*?$/i');
$query = $this->repository->createQueryBuilder()
->find()
->limit($limit)
->skip($offset);
$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));
if( ! empty($orderby) && $order ){
$query->sort($orderby, $order);
}
return $query->getQuery()->execute();
}
如果有人对查询生成器的内部结构有更多了解,我仍然希望听到一些反馈,说明为什么这行得通,而上面的行不通。