2014-04-02 64 views
4

在關係數據庫的原則中,我們有QueryBuilder,可以手動編寫DQL查詢,如果我們真的必須的話,可以使用Doctrine的連接來執行原始SQL。我還沒有發現(在API中,也沒有在文檔中)在教條的mongo項目中做到這一點的方法。本地Mongo查詢原則ODM

如何使用mongo odm執行本機查詢? (除了注射doctrine_mongodb.odm.default_connection,或者是真正的唯一途徑?)

+0

嗨!我目前處於同樣的情況,你是否設法解決這個問題? – rdiaz82

+0

不,我已經採取了我在第二段中提到的方法:通過容器注入連接。 – Quant

回答

2

內,您的文檔庫,您可以添加這樣的私有方法:

private function _getNativeConnection(){ 
    $connection = $this->getDocumentManager()->getConnection(); 
    $mongo = $connection->getMongo(); 
    if(!$mongo){ 
     $connection->connect(); 
     $mongo = $connection->getMongo(); 
    } 

    //You can use this as literal strings, or pass them as parameters to the method 
    $db = $mongo->selectDB('YOUR_MONGO_DB')->selectCollection("MONGO_COLLECTION"); 

    return $db; 
} 

然後,您可以使用這樣從另一個存儲庫方法:

public function another_public_method{ 
    ... 
    $collection = $this->_getNativeConnection(); 
    ... 
} 

的$集合,代表了PHP MongoCollection(http://php.net/manual/en/class.mongocollection.php),與您可以(通過類接口)使用本地蒙戈查詢。 你不能準確地寫字面查詢,但通過接口,你可以做任何你想要的,查詢,聚合等...

這是你需要做什麼?

問候

0

您可以使用此代碼訪問集合原生查詢

$collection = $documentManager->getDocumentCollection('Vendor\MyDocument'); 

然後,你可以做這樣的事情

$collection->aggregate($pipeline);