2017-08-30 66 views
0

我的模型貓鼬找到價值元素的子文檔

ActivityLanguage 
language_id: ID 
name: String 

Activity 
price: Int 
languages: [ActivityLanguage] 

我想做的事情是要找到與某些LANGUAGE_ID的ActivityLanguage的活動。

這就像我需要(在蒙戈)

db.activities.find({"languages.language_id": "59640de1675c1481820a543e" }, {"languages.$": 1}) 

我怎麼能在貓鼬實現呢?

我已經嘗試過使用:

Activity.find({'languages.language_id': language_id}) 

Activity.find({"languages": {$elemMatch: { language_id: language_id }}}) 

它們都返回一個空數組(我已經三重檢查我的數據庫中有與該條件的活動)。我也嘗試了所有在StackOverflow中找到的答案,但沒有成功

我該如何在貓鼬中實現它?

回答

0

您可以使用貓鼬model.populate

從你的例子:

Activity. 
    find({}). 
    populate({ 
    path: 'languages', 
    model: 'ActivityLanguage', 
    match: { language_id: ID } //here you define your language_id criteria 
    }). 
    exec() 
+0

謝謝你的回答,但沒有奏效。經過數小時的嘗試,我無法解決從您的解決方案中出現的錯誤:「對於模型ActivityLanguage而言,投向objectid失敗,因爲路徑_id中的值[ActivityLanguage stringified]」 – Truca

+0

嘗試使用'findOne'或'findById',它們不是和'find'一樣工作,或者嘗試在find中使用一些crieriria。也許是因爲你收到多個文件。另外,如果你使用Mongoose,你必須爲你的模型定義一個模式。你做到了嗎? – ASem