2017-03-06 51 views
2

我使用聚合$查找來加入兩個集合。如何使用Morphia從兩個mondoDb加入集合中檢索特定字段?

"users" 

{  
"_id" : ObjectId("5984f8c454b1fd6926c324fd"), 
    "email" : "[email protected]", 
    "userId" : "uid", 
    "userName" : "admin" 
} 
"userinfo" 

{ 
    "_id" : ObjectId("59d82812b63f1c31cf906003"), 
    "userId" : "uid", 
    "phone" : "000000000" 
} 

我在我的「用戶」實體類中使用@Reference(idOnly = true)來引用第二個集合。我只想檢索特定的字段,如:「email」,「userId」,「phone」。

Query<Users> query = usersDAO.createQuery() 
       .retrievedFields(true,"email", "userId", "phone") 

它給了我不承認提出的「手機」一個運行時錯誤,因爲它來自引用集「用戶信息」。我試圖指定「userinfo.phone」等沒有運氣。當「phone」字段從查詢中消除時,它工作正常。 什麼是實現這一目標的正確方法?

謝謝!

回答

0

根據$ lookup查詢,用戶信息將被添加到用戶文檔中,查找查詢中的「as」字段提及的名稱。

所以,你應該使用手機一樣lookup_as.phone

如果查找查詢如下

 

{ 
    "$lookup": { 
     "from": "userinfo", 
     "localField": "userId", 
     "foreignField": "userId", 
     "as": "uinfo" 
    } 
} 

因此,在這種情況下,你應該使用

 

    Query query = usersDAO.createQuery() .retrievedFields(true,"email", "userId", "uinfo.phone") 

+0

因爲我沒有明確指定MongoDB查找查詢(Morphia確實在底層創建了一些查詢),所以「uinfo」別名似乎無法通過Morphia使用,所以「uinfo.phone」引發了一個異常。 – deepconvnet

+0

讓我來澄清我的問題。我需要使用Morphia加入兩個MondoDB集合並檢索一組特定字段。 – deepconvnet

+0

與新的Morphia項目()函數是否有任何等價物?在Morphia 1.3.2中?在同一行獲得多個字段 – Milson

0

的正確的方法是訪問引用的集合並使用您需要的字段。你不能有選擇地從引用的集合中選擇字段。它只是如何DBRef的作品。

List<Users> query = usersDAO.createQuery() 
      .retrievedFields(true,"email", "userId", "userinfo").toList(); 

userInfo將被填充,你可以遍歷,把你從引用的收集需要的字段。

+0

如果「userInfo」集合中含有大量數據,它將不允許減少(過濾)從該引用集合中檢索到的數據量。謝謝。 – deepconvnet

+0

對不起,不知道我是否理解你在說什麼。它只會拉一個文件。 – Veeram

相關問題