Native Mongo Query Doctrine ODM

时间:2014-04-02 08:50:57

标签: mongodb doctrine doctrine-odm

在关系数据库的学说中,我们有QueryBuilder,可以手动编写DQL查询,如果真的必须,可以使用Doctrine的连接来执行原始SQL。我没有在doctrine的mongo项目中找到(在API中,也没有文档中)这样做的方法。

如何使用mongo odm执行本机查询? (除了注入doctrine_mongodb.odm.default_connection,还是真的唯一的方法?)

2 个答案:

答案 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);