在关系数据库的学说中,我们有QueryBuilder,可以手动编写DQL查询,如果真的必须,可以使用Doctrine的连接来执行原始SQL。我没有在doctrine的mongo项目中找到(在API中,也没有文档中)这样做的方法。
如何使用mongo odm执行本机查询? (除了注入doctrine_mongodb.odm.default_connection,还是真的唯一的方法?)
答案 0 :(得分: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();
...
}
$ collection表示一个PHP MongoCollection(http://php.net/manual/en/class.mongocollection.php),您可以使用本机Mongo查询(通过类接口)。 您无法准确地编写文字查询,但是,通过界面,您可以执行任何操作,查询,聚合等...
这是你需要做的吗?
此致
答案 1 :(得分:0)
您可以使用此代码访问本机查询的集合
$collection = $documentManager->getDocumentCollection('Vendor\MyDocument');
然后你可以做像
这样的事情$collection->aggregate($pipeline);