在關係數據庫的原則中,我們有QueryBuilder,可以手動編寫DQL查詢,如果我們真的必須的話,可以使用Doctrine的連接來執行原始SQL。我還沒有發現(在API中,也沒有在文檔中)在教條的mongo項目中做到這一點的方法。本地Mongo查詢原則ODM
如何使用mongo odm執行本機查詢? (除了注射doctrine_mongodb.odm.default_connection,或者是真正的唯一途徑?)
在關係數據庫的原則中,我們有QueryBuilder,可以手動編寫DQL查詢,如果我們真的必須的話,可以使用Doctrine的連接來執行原始SQL。我還沒有發現(在API中,也沒有在文檔中)在教條的mongo項目中做到這一點的方法。本地Mongo查詢原則ODM
如何使用mongo odm執行本機查詢? (除了注射doctrine_mongodb.odm.default_connection,或者是真正的唯一途徑?)
內,您的文檔庫,您可以添加這樣的私有方法:
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),與您可以(通過類接口)使用本地蒙戈查詢。 你不能準確地寫字面查詢,但通過接口,你可以做任何你想要的,查詢,聚合等...
這是你需要做什麼?
問候
您可以使用此代碼訪問集合原生查詢
$collection = $documentManager->getDocumentCollection('Vendor\MyDocument');
然後,你可以做這樣的事情
$collection->aggregate($pipeline);
嗨!我目前處於同樣的情況,你是否設法解決這個問題? – rdiaz82
不,我已經採取了我在第二段中提到的方法:通過容器注入連接。 – Quant