###実現したいこと
Node.jsとMongoDBを使って二択の質問をユーザーが投稿、回答できるアプリを作成しています。
回答の集計結果を表示させる際に、ユーザーの年齢、性別ごとのグラフを描画できるようにデータベースを設計しており、特定の質問からそれに紐付くユーザー情報にアクセスできるようにしたいのですが、クエリの書き方でつまずいています。
###該当するコード
UserとQuestionの各スキーマは下記の通りです。
JavaScript
1//UserModel 2const userSchema = new mongoose.Schema({ 3 username: { 4 type: String, 5 required: true, 6 unique: true, 7 }, 8 gender: { 9 type: String, 10 }, 11 age: { 12 type: Number, 13 }, 14 //ユーザーが回答した質問とその答え 15 answers: [{ 16 _id: { 17 type: mongoose.Schema.Types.ObjectId, 18 ref: 'Question', 19 }, 20 answer: { 21 type: String, 22 }, 23 }], 24 //ユーザーが投稿した質問 25 postedQuestions: [{ 26 type: mongoose.Schema.Types.ObjectId, 27 ref: 'Question', 28 }] 29});
JavaScript
1//QuestionModel 2const questionSchema = new mongoose.Schema({ 3 title: { 4 type: String, 5 require: true, 6 }, 7 ansA: { 8 type: String, 9 require: true, 10 }, 11 ansB: { 12 type: String, 13 require: true, 14 }, 15 //Aと回答したユーザー 16 usersSelectedA: [ 17 { 18 type: mongoose.Schema.Types.ObjectId, 19 ref: 'User', 20 21 } 22 ], 23 //Bと回答したユーザー 24 usersSelectedB: [ 25 { 26 type: mongoose.Schema.Types.ObjectId, 27 ref: 'User', 28 } 29 ], 30 //質問の投稿者 31 createdBy: { 32 type: mongoose.Schema.Types.ObjectId, 33 ref: 'User', 34 }, 35}); 36
上の画像で示したusersSelectedAの配列の中に入っているユーザー情報を取り出したいです。
JavaScript
1const question1 = await Question.findOne( {title: 'どっち派?' }).populate('createdBy').exec(); 2console.log(question1.createdBy.age);
例えば、質問の投稿者データ(createdBy)には上のようなクエリで到達することができるのですが、回答者データ(usersSelectedA)は配列に入っているため、取り出し方が分かりません。
何かアドバイスを頂けないでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。