2016-03-03 64 views
0

我試圖讓下面的發佈功能工作。我想檢索所有沒有當前用戶在其profile.classes陣列中擁有的課程的用戶。我在這裏做錯了什麼?流星 - 在發佈中創建一個變量

Meteor.publish('classes', function() { 

    var class = Meteor.users.find({_id: this.userId},{fields: {"profile.classes": 1}}); 

    var users = Meteor.users.find({ 
    roles:'is_student', 
    "profile.classes": { $ne : class } 
    }}); 

    return users; 
}); 
+0

'var class = Meteor.users.find(/ * ... * /).fetch()[0] .classes'?或者使用'findOne'來避免'fetch'。 'find'返回一個Mongo遊標,而不是該文檔的文檔或字段。 –

+0

'classes'應該是一個數組還是單個字段? –

+0

我認爲這是一個數組,因爲可能有數學,科學,英語等 – bp123

回答

2

假設profile.classes持有字符串數組,並要得到誰沒有在當前的用戶類的類的所有用戶,這裏是一些代碼,做你問什麼:

Meteor.publish('classes', function () { 

    var user = Meteor.users.findOne({_id: this.userId},{fields: {"profile.classes": 1}}); 
    if(user && user.profile && user.profile.classes) { 
    return Meteor.users.find({ roles: 'is_student', 'profile.classes': { $nin: user.profile.classes } }); 
    } else { 
    return this.ready(); 
    } 
}); 

代碼的重要路線是:

return Meteor.users.find({ roles: 'is_student', 
      'profile.classes': { $nin: user.profile.classes } }); 

這裏的關鍵部分是$nin。從MongoDB documentation

$nin選擇其中的文件:
- 字段值不是指定數組中或
- 字段不存在。

因此,這應該選擇誰沒有profile.classes數組字段,或者沒有當前用戶擁有的任何類。

+0

合作謝謝斯蒂芬!這工作得很好。我只需要稍微修改一下,讓它適應我的其他條件,因此延遲。再次感謝。 – bp123