【问题标题】:How to return a single index from an array in a Meteor publication如何从 Meteor 出版物中的数组返回单个索引
【发布时间】:2016-11-25 20:18:26
【问题描述】:

我有一组可供所有用户使用的“任务”。用户可以勾选他们已经“完成了一项任务”。当他们这样做时,将调用一个方法,该方法将他们的 userId 添加到附加到名为“usersCompleted”的任务文档的数组中。如果用户完成了一项任务,他们的 userId 将在该数组中。

我不想将此数组发布到客户端,因为这样所有用户都可以访问其中包含其他 userId 的数组。

但是,我希望有一个帮助程序来检查用户的 ID 是否在此数组中,然后返回“已检查”或“”。这样用户就可以看到他们已完成的任务。

在我的出版物中,我能够找到用户已完成的所有任务,但我无法从“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;
  }
});

【问题讨论】:

标签: arrays mongodb meteor meteor-publications


【解决方案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;
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2019-08-15
    • 2015-01-29
    • 2015-10-17
    相关资源
    最近更新 更多