2014-09-02 54 views
0

我试图用MongoDB的-ODM运行PHP这个确切的查询转换控制台命令ODM

db.runCommand ({ distinct: "messages", 
        key: "conversation", 
        query: { conversation: { $in: ["533f28c9211b6f7e448b4567","52cb29b0211b6fd9248b456b"] } } 
       }) 

我如何与不同的transate它()? 谢谢。

+0

我会从阅读您的ODM文档开始,以其为准。很高兴知道你正在使用的确切库以及你已经写过的任何代码。 – Roberto 2014-09-03 02:51:30

回答

0

你可以看到我的实现:

定义这个方法,在MongoDB中

/** 
    * Execute javascript in mongodb 
    * 
    * @param string $js JavaScript function 
    * 
    * @return array 
    */ 
    protected function executeJs($js) 
    { 
     // get database name 
     $mongoDatabaseName = $this->dm->getConfiguration()->getDefaultDB(); 
     // get connection 


     $m = $this->dm->getConnection(); 
     // return results, get mongodb client 

     return $m->getMongo() 
      // select database 
      ->selectDB($mongoDatabaseName) 
      // execute javasctipt function 
      ->command(array(
       // js 
       'eval' => $js, 
       // no lock database, while js will be executed 
       'nolock' => true, 
      )); 
    } 

执行JavaScript的查询定义您的查询字符串

$_myQuery = 'function() {var messages = []; 
          db.runCommand ({ distinct: "messages", 
              key: "conversation", 
              query: { conversation: { $in: ["533f28c9211b6f7e448b4567","52cb29b0211b6fd9248b456b"] } } 
              } 
             ).forEach(function(msg){ messages[]= msg }); 
          return messages; }'; 

最后,执行查询

$messageCollection = $this->executeJs($_myQuery); 
if(isset(messageCollection)) 
    var_dump(messageCollection['retval']); // it will show result