【问题标题】:Native Mongo Query Doctrine ODM本机 Mongo 查询原则 ODM
【发布时间】:2014-05-13 10:07:36
【问题描述】:

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

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

【问题讨论】:

  • 嗨!我现在也是这种情况,请问您解决了吗?
  • 不,我采用了我在第二段中提到的方法:通过容器注入连接。

标签: mongodb doctrine doctrine-odm


【解决方案1】:

您可以使用此代码访问本机查询的集合

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

然后你可以做类似的事情

$collection->aggregate($pipeline);

【讨论】:

    【解决方案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 查询(通过类接口)。 你不能完全写字面查询,但是,通过接口你可以做任何你想做的事情,查询、聚合等等......

    这是你需要做的吗?

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2021-05-02
      • 1970-01-01
      相关资源
      最近更新 更多