二択の質問をユーザーが作成、回答できるアプリをNode.jsで作っています。フレームワークはExpress.js、データベースはMongoDBを採用しています。
当初ログイン認証を前提にしてユーザーモデルを作成していたのですが、ユーザー登録をしなくても匿名ユーザーとして質問に回答できるようにしたいと考えました。そこで実装の仕方について悩んでいます。
Questionモデルのスキーマは下記の通りです。任意の質問に対してAまたはBと回答したユーザーそれぞれのIDを配列に保存しています。
JavaScript
1const questionSchema = new mongoose.Schema({ 2 title: { 3 type: String, 4 require: true, 5 }, 6 ansA: { 7 type: String, 8 require: true, 9 }, 10 ansB: { 11 type: String, 12 require: true, 13 }, 14 usersAnsweredA: [{ 15 type: mongoose.Schema.Types.ObjectId, 16 ref: 'User', 17 }], 18 usersAnsweredB: [{ 19 type: mongoose.Schema.Types.ObjectId, 20 ref: 'User', 21 }], 22 createdBy: { 23 type: mongoose.Schema.Types.ObjectId, 24 ref: 'User', 25 }, 26});
匿名ユーザーが回答する際に一意のObjectIdを割り当てることを考えたのですが、回答ユーザーの配列に保存されているユーザーIDはUserモデルと紐づいているので、以下のような形でリレーションを行うと、匿名ユーザーのドキュメントを取得することができません。
JavaScript
1const selectedQuestion = await Question.findById(req.params.id) 2 .populate({ path: 'usersAnsweredA', ...opt }) 3 .populate({ path: 'usersAnsweredB', ...opt });
何か筋の良いやり方はないでしょうか?
お知恵をお貸しいただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/21 15:44