本地Mongo查询Doctrine ODM

4
在关系型数据库的Doctrine中,我们有QueryBuilder可以手动编写DQL查询,如果必要的话,可以使用Doctrine的连接执行原始SQL。但是我在Doctrine的Mongo项目中没有找到(无论在API还是文档中)如何执行这个操作的方法。除了注入doctrine_mongodb.odm.default_connection之外,我应该如何使用mongo odm执行本机查询呢?

嗨!我目前也处于同样的情况,你解决了这个问题吗? - rdiaz82
不,我采用了我在第二段提到的方法:通过容器注入连接。 - Quant
2个回答

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查询。虽然你不能直接编写查询语句,但是通过该接口你可以进行任何你想做的操作,如查询、聚合等等。
这就是你需要做的吗?
谢谢

0
你可以使用这段代码来访问本地查询的集合。
$collection = $documentManager->getDocumentCollection('Vendor\MyDocument');

然后你可以做这样的事情

$collection->aggregate($pipeline);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接