Meteor - 在发布中创建变量

时间:2016-03-03 22:34:39

标签: javascript mongodb meteor

我试着让下面的发布功能起作用。我想检索所有没有当前用户在其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;
});

1 个答案:

答案 0 :(得分: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数组字段的用户,或者没有当前用户所拥有的类。