2016-02-26 44 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() 
    } 
})