Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine MongoDB查询生成器addOr查询不返回任何结果_Mongodb_Doctrine Orm_Zend Framework2_Query Builder - Fatal编程技术网

Doctrine MongoDB查询生成器addOr查询不返回任何结果

Doctrine MongoDB查询生成器addOr查询不返回任何结果,mongodb,doctrine-orm,zend-framework2,query-builder,Mongodb,Doctrine Orm,Zend Framework2,Query Builder,我正在跨文档中的多个字段进行超级简单搜索,以查看其中是否有任何字段具有单个值。(注意:如果字符串中包含值,则某些字段使用正则表达式进行搜索)。使用查询生成器,我构建了以下内容 public function search($value, $limit, $offset=0, $orderby = '', $order='' ) { $regexVal = new \MongoRegex('/^.*(\b'.str_replace(' ', '\s', $value).'\b).*?$/

我正在跨文档中的多个字段进行超级简单搜索,以查看其中是否有任何字段具有单个值。(注意:如果字符串中包含值,则某些字段使用正则表达式进行搜索)。使用查询生成器,我构建了以下内容

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();
}
如果我转储构造的查询值,我将得到以下数组。其中的额外关联字段由条令筛选器添加

通过查询生成器,我没有得到任何结果,但是如果我自己构造查询并在像成吉思这样的管理应用程序中运行,我会得到预期的单个文档结果

实际写入的mongodb字符串如下所示

这个项目是一个zend2应用程序,已经在使用doctrine和mongo。一般来说,我不是mongo的专家,所以我不确定我在查询生成器中做错了什么,因为我没有得到与直接执行查询相同的结果。我也找不到有关stack或QueryBuilder文档的任何信息,这些信息为多个addor语法提供了任何额外的线索

任何帮助或指导都将不胜感激,在最基本的形式中,我需要查询生成器来获取关联=x和(field1=val或field2=value)的文档


谢谢

确实不确定上面提到的问题到底是什么,但在玩过之后,切换query builder的顺序修复了问题

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();
}
如果有人对query builder的内部结构有更多的了解,我仍然希望听到一些关于为什么这样做的反馈