2016-08-02 86 views
3

我有以下查詢MongoDB中如何在MongoDB中的查詢中使用ObjectId?

$this->createQueryBuilder() 
      ->field('actor')->in($actorIdArray) 
      ->getQuery() 
      ->execute(); 

在現場演員與註釋

@MongoDB\ReferenceOne(targetDocument="User", simple=true) 

的對象引用,這意味着它將代替存儲完整的參考的對象ID。

當$ actorIdArray是ID與形式

["5706cb39821b166d3931f34f", "56015f7d4f8bd90b769e6e75"] 

查詢不返回任何結果,這是預期的,因爲提起演員包含對象ID的數組。

但是,如果我建立數組這樣

[new MongoId("5706cb39821b166d3931f34f"), new MongoId("56015f7d4f8bd90b769e6e75")] 

它也不管用,這對我來說是相當驚人的。

日誌顯示的查詢時

{ "actor": {"$in":[{"$id":"5706cb39821b166d3931f34f"},{"$id":"56015f7d4f8bd90b769e6e75"}]}} 

,我認爲它應該是這樣的

{ "actor": {"$in":[ObjectId("5706cb39821b166d3931f34f"),ObjectId("56015f7d4f8bd90b769e6e75"]}} 

不知道如果我做錯了什麼, 任何想法?

+0

它必須是來自ODM的文檔數組。 – Alsatian

+0

如果你想避免對象加載,請使用參考http://www.doctrine-project.org/api/mongodb_odm/1.0/class-Doctrine.ODM.MongoDB.DocumentManager.html#_getReference – Alsatian

+0

@Alsatian此查詢可以工作如果我從控制檯執行它 {「演員」:{「$在」:的ObjectId(「5706cb39821b166d3931f34f」)的ObjectId(「56015f7d4f8bd90b769e6e75」]}} 所以沒有必要使用的文件的數組。 – Fran

回答

0

原則希望你的數組是一個文件數組。

無需查詢即可加載document references

$dm = $this->get('doctrine.odm.mongodb.document_manager'): 

$documents = array(); 
foreach($actorIdArray as $id){ 
    $documents[] = $dm->getReference('AppBundle:Actor',$id); // <- this is the key 
} 

$this->createQueryBuilder() 
      ->field('actor')->in($documents) 
      ->getQuery() 
      ->execute(); 
+0

它不工作:(這是$ DM-> getReference返回 { 「__initializer__」:{}, 「__cloner__」:{}, 「__isInitialized__」:假 } – Fran

相關問題