2017-08-30 62 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