我有一组可供所有用户使用的“任务”。用户可以勾选他们已经“完成任务”。当他们这样做时,会调用一个方法,该方法将其userId添加到附加到名为“usersCompleted”的任务文档的数组中。如果用户已完成任务,则其userId将位于该阵列中。
我不想将此数组发布到客户端,因为这样所有用户都可以访问其中包含其他userId的数组。
但是,我希望有一个帮助程序来检查用户的ID是否在此数组中,然后返回'checked'或''。这样用户就可以看到他们已完成的任务。
在我的出版物中,我能够找到用户已完成的所有任务,但我无法仅从'usersCompleted'数组返回其ID。如果有人能帮我这样做,我将不胜感激。
以下是我当前的代码,但$ elemMatch未正确使用
Meteor.publish( 'tasks.single.lesson.completed', function(lessonNumber) {
check(lessonNumber, Number);
if(this.userId) {
return Tasks.find({ lesson: lessonNumber, usersCompleted: this.userId} , {fields: { $elemMatch: {usersCompleted: this.userId}}});
} else {
this.stop();
return;
}
});
答案 0 :(得分:1)
我解决了这个问题,我正在为可能遇到此问题的其他人发布答案。
原来Mongo有一个针对这种情况构建的修饰符:$
我的工作出版物现在是:
Meteor.publish( 'tasks.single.lesson.completed', function(lessonNumber) {
check(lessonNumber, Number);
if(this.userId) {
return Tasks.find({ lesson: lessonNumber, usersCompleted: this.userId} ,
{ fields: { "usersCompleted.$": 1}});
} else {
this.stop();
return;
}
});