簡體   English   中英

Doctrine MongoDB查詢生成器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過濾器正在其中添加額外的關聯字段。

通過查詢生成器我沒有得到任何結果,但是,如果我自己構造查詢並在像genghis這樣的管理應用程序中運行它,則可以獲得預期的單個文檔結果。

實際編寫的mongodb字符串如下所示。 https://gist.github.com/jchamb/ce60829480576a88290d

這個項目是一個zend2應用,已經在使用doctrine和mongo。 我一般來說不是mongo的專家,所以我不確定在查詢生成器內部做錯了什么,我沒有得到與直接執行查詢相同的結果。 我在堆棧上或查詢構建器文檔中都找不到任何信息,這些信息也無法為多個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();
}

如果有人對查詢生成器的內部了解更多,還是希望聽到一些有關為什么這樣做的反饋,而上面的卻沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM