0

すべてのユーザーが利用できる「タスク」のコレクションがあります。ユーザーは、「タスクを完了した」ことにチェックを入れることができます。これを行うと、「usersCompleted」というタスク ドキュメントに添付されている配列に userId を追加するメソッドが呼び出されます。ユーザーがタスクを完了した場合、そのユーザー ID はその配列に含まれます。

この配列をクライアントに公開したくありません。すべてのユーザーが他の 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;
  }
});
4

1 に答える 1

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;
  }
});
于 2016-11-25T12:18:26.453 に答える