2012-06-14 63 views
2

我想查詢使用點符號嵌入文檔的原始MongoDB的查詢 - 這裏是一些例子:如何創建使用Doctrine2和Symfony2的

http://www.mongodb.org/display/DOCS/Dot+Notation+(Reaching+into+Objects)

由於我掛了DQL/QueryBuilder API我只想通過Doctrine傳遞原始查詢。我似乎無法在Symfony2的構造中解決這個問題。唯一的代碼,我可以肯定的是:

$dm = $this->get('doctrine.odm.mongodb.document_manager'); 
$dm->getSchemaManager()->ensureIndexes(); 
$repo = $dm->getRepository('MyBundle:MyDocument'); 
$qb = $repo->createQueryBuilder(); 

// insert magic here 

$query = $qb->getQuery(); 
$result = $query->execute(); 

這裏的點符號是如何工作的:

$dm = $this->get('doctrine.odm.mongodb.document_manager'); 
$dm->getSchemaManager()->ensureIndexes(); 
$repo = $dm->getRepository('MyBundle:MyDocument'); 
$qb = $repo->createQueryBuilder(); 

$qb 
    ->field('embedded_document_field.field1')->equals(1) 
    ->field('embedded_document_field.field2')->equals('foo') 
; 

$query = $qb->getQuery(); 
$result = $query->execute(); 

回答

0

這個問題是古老的,但如果有人遇到它,它是相當簡單與要做到這一點查詢生成器:

$qb = $this->createQueryBuilder(); 
    $qb->addOr($qb->expr()->field('embedded.embedded2.username')->equals($username)); 
    $qb->addOr($qb->expr()->field('embedded.embedded3.username')->equals($username)); 
    $qb->addOr($qb->expr()->field('embedded.embedded4.username')->equals($username)); 
    $qb->field('status')->lt(10); 
    $involved = $qb->getQuery()->execute(); 
    return $involved; 

我承認這一點,實際上並沒有回答有關通過原始經過(這是我自己的問題),但它確實解決你的問題的問題。

相關問題