2016-02-26 40 views
0

如何获取同一个class_id中的学生的电子邮件地址,因为有更多的2个学生在DB中的不同类中?找到多个文档使用相同的ID不工作,使用流星+反应和mongoDB

我有这个,但它返回空数组[]

Meteor.users.find({"course_learn_list.$.class_id": {$in: [classId]}}, 
      {field: {"emails.address": 1}} 
     ).fetch() 

集合

{ 
     "_id": "LMZiLKs2MRhZiiwoS", 
     "course_learn_list": [ 
     { 
      "course_id": "M8EiKfxAAzy25WmFH", 
      "class_id": "jePhNgEuXLM3ZCt98" 
     }, 
     { 
      "course_id": "5hbwrfbfxAAzy2nrg", 
      "class_id": "dfbfnEuXLM3fngndn" 
     } 
     ], 
     "emails": [ 
     { 
      "address": "[email protected]", 
      "verified": false 
     } 
     ] 
    }, 
    { 
     "_id": "JgfdLKs2MRhZJgfNgk", 
     "course_learn_list": [ 
     { 
      "course_id": "M8EiKfxAAzy25WmFH", 
      "class_id": "jePhNgEuXLM3ZCt98" 
     }, 
     { 
      "course_id": "5hbwrfbfxAAzy2nrg", 
      "class_id": "dfbfnEuXLM3fngndn" 
     } 
     ], 
     "emails": [ 
     { 
      "address": "[email protected]", 
      "verified": false 
     } 
     ] 
    } 

回答

0

我想你想:

Meteor.users.find({ "course_learn_list.class_id": classId }, 
    { "course_learn_list.$": 1, "emails.address": 1 }).fetch() 

这应该发现在每一个course_learn_list一审数组,其中classId是您的classId。

+0

不工作。它仍然返回空[] – phongyewtong

+0

嗯,你实际上是发布所有流星用户? –

+0

哦,是的,需要发布它,我把它们放在meteor.method – phongyewtong

0

在这种情况下,您可能不需要使用投影来获得正确的答案。下面是在选择仅使用.运营商提取验证的电子邮件地址的例子:

const ids = ['jePhNgEuXLM3ZCt98', 'some-other-id']; 
const emails = 
    Meteor.users.find({ 'course_learn_list.class_id': { $in: ids } }) 
    .fetch() 
    .map(user => _.findWhere(user.emails, { verified: true }).address); 
0

这对我的作品!

Meteor.publish("getMyClassStudents", function(classId) { 
    console.log("Publish getMyClassStudents") 
    var self = this 
    if (self.userId) { 
     var data = Meteor.users.find({ 
      "course_learn_list.class_id": classId 
     }, { 
      "fields": { 
       "emails.address": 1 
      } 
     }) 
     return data 
    } 
    else { 
     return self.ready() 
    } 
})