前提・実現したいこと
MongoDBに、productsとusersという2つのドキュメント情報を登録しています。
(下記に示します)
productsにuserIdというキーが存在し、Mongooseのpopulate()でproductsとusersの情報を一度に取得できるようにしたいです。
ターミナル出力結果
該当のソースコードでの出力結果です。
私が期待している結果は、(8行目)userId: <ここにuser情報が出力> でした。
さらに次に示す該当コードの実行結果では、下記の通りuserIdが出力されてしまいます。
product
1[ 2 { 3 _id: 5d8f1e68ef4d75a940434aa6, 4 title: 'test', 5 price: 222, 6 description: 'test', 7 imageUrl: 'https://timedotcom.files.wordpress.com/2015/06/521811839-copy.jpg', 8 userId: 5d8f1a937c6be9a89d6491fc, 9 __v: 0 10 } 11]
該当のソースコード
Contorollerの記述:
js
1exports.getProducts = (req, res, next) => { 2 Product.find() 3 .populate('userId') 4 .then(products => { 5 console.log(products); 6 }); 7 }) 8 .catch(err => console.log(err)); 9};
Model(product)の記述:
js
1const mongoose = require('mongoose'); 2const Schema = mongoose.Schema; 3const productSchema = new Schema({ 4 title: { 5 type: String, 6 required: true 7 }, 8 price: { 9 type: Number, 10 required: true 11 }, 12 description: { 13 type: String, 14 required: true 15 }, 16 imageUrl: { 17 type: String, 18 required: true 19 }, 20 userId: { 21 type: Schema.Types.ObjectId, 22 ref: 'User', 23 required: true 24 } 25}); 26module.exports = mongoose.model('Product', productSchema); 27
Model(user)の記述:
js
1const mongoose = require('mongoose'); 2const Schema = mongoose.Schema; 3const userSchema = new Schema({ 4 name: { 5 type: String, 6 required: true 7 }, 8 email: { 9 type: String, 10 required: true 11 }, 12 cart: { 13 items: [ 14 { 15 productId: { 16 type: Schema.Types.ObjectId, 17 ref: 'Product', 18 required: true 19 }, 20 quantity: { type: Number, required: true } 21 } 22 ] 23 } 24}); 25 26module.exports = mongoose.model('User', userSchema);
試したこと
下記ドキュメントを参照しましたが、何が間違っているのか理解できませんでした。
https://mongoosejs.com/docs/populate.html
補足情報(FW/ツールのバージョンなど)
"mongoose": "^5.7.1",
回答2件
あなたの回答
tips
プレビュー