[英]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.