2017-06-20 4 views
0

今日私は自分のウェブサイトの機能的な部分を完成させたので、私は開発の安全なアプリの部分に入った。関連するコンテンツだけをユーザーに提供したいので、教師(= user.role == "teacher"のユーザー)には、_idが指定されていれば、指定された課題にアクセスできるようにしたい_idsのassignment.teachersList配列私はパブリッシュのこの検証をしたいので、私は、クエリの最後にカーソルを取得する必要があります。(mongo)IDの配列:どうすればよいですか?

// in a publish 
Assignements.find({ teachersList: this.userId }); 

はしかし、これはいつも私はfalseを返します。

OFFICIAL documentation of mongoを見た後、それは私がほど単純であるべき欲しいものやっように思えます。まず、このコンテキストの問題の恐れがあること、私のような何かを試してみました:

// in a publish 
let self = this; 
Assignements.find({ teachersList: self.userId }); 

をして、私はまだ何も得ることは良くありません。私はCursor.map()を使用してそこに私の状態を入れようとしましたが、マップがカーソルを返さないので、私はデータを取得しますが、私たちはパブリッシュされているので動作しません。

私が最初に試したのはうまくいくはずだから、何か間違っているのは間違いありませんが、何が...? 問題は、それが_idsの配列であるという事実から来ているのだろうかと疑問に思っています。今は、唯一の文字列の配列です。そして、それはthis.userIdメソッドでは、文字列を返します....しかし、多分私は間違っていると私はMeteor.Mongo.ObjectId(the_string_id)オブジェクトを使用する必要がありますか?

申し訳ありません!このような簡単なクエリがなぜ機能しないのか分かっているなら、教えてください!ありがとう:)

答えて

0

teachersListは配列であり、idではありません。あなたは配列の値を持つIDを持つ文書を見つけようとしています...

私は通常、すべてのプライベートオーナーコレクションでこのパターンを使用します:私のコレクションにonInsertイベントを追加し、 ownerIdとしてユーザーを挿入しているドキュメントに追加します。次に、公開するときに、私はすべての文書をユーザーの所有者IDで公開します。 MongoDBからクリーンでシンプル、でも不要な役割...

しかし、あなたは上記のパターンを使用しないことを決定し、場合...

db.inventory.find({ tags: { $in: [ /^be/, /^st/ ] } })

このクエリは、すべての文書を選択し、インベントリコレクション内のタグフィールドには、beまたはstで始まる少なくとも1つの要素が含まれる配列が格納されます。

流星では、クエリは次のようになります。

Assignments.find({ownerId: { $in: teachersList}});

+0

を同様にあなたの答えのおかげでは、再び、あなたのパターンはかなり良いアイデアです!あなたは私に何かを教えました:)私はおそらく将来のプロジェクトでそれを使うでしょう:) – xababafr

+0

私はそのパターンを思いついたことはありませんでしたが、ある時間前にチュートリアルのどこかでそれを見つけ出して試してみた。答えに満足し、それがあなたの問題を解決したら、他の人がそれに答えようとするのを避けるために答えとしてマークしてください。 – Mozfet

関連する問題