2017-07-18 11 views
1

私は人口を増やしてプレイしようとしますが、成功しません... これは可能ですか?モンゴーズが配列に入っています

は私が持っている2シェマ: - ユーザー

import mongoose, { Schema } from 'mongoose' 

const userSchema = new Schema({ 
    email: { type: String, unique: true }, 
    password: String, 
    passwordResetToken: String, 
    passwordResetExpires: Date, 

    products: [{ 
    productId: { type: Schema.Types.ObjectId, ref: 'Product' }, 
    dateAdd: { type: Date, default: Date.now } 
    }] 
}, { timestamps: true }) 

const User = mongoose.model('User', userSchema) 

export default User 

と製品:

import mongoose, { Schema } from 'mongoose' 

const productSchema = new Schema({ 
    domain: String, 
    originUrl: { type: String }, 
    price: Number, 
    img: String, 
    userFollow: [{ type: Schema.Types.ObjectId, ref: 'User' }] 
}) 

const Product = mongoose.model('Product', productSchema) 

export default Product 

は、だから私は私のprodcutIdのそれぞれについて、すべての情報を取得したい

私がしようこの方法(および成功しなかった多くの他のもの):

User.findOne({ _id: userId }).populate({ 
     path: 'products.productId', 
     populate: { path: 'products.productId', model: 'Products' } 
}).exec(function (err, products) { 
    if (err) { 
    console.log('errors :' + err) 
    } 
    console.log('Product => ' + util.inspect(products)) 
}) 

移入はちょうどfindOne()

+0

あなたは 'products'を返さず、' products'の配列を持つ 'user'を1つ返します。 'model: 'Products''を削除するか、' model:' Product''を実行してみてください。 – Mikey

答えて

1

私はUser.findOne({ _id: userId }).populate('products.productId')がうまくいくと思います。

1

はMongoDBののaggregate機能と$ lookupを使用してみてくださいとは何の影響、同じ結果を持っていません。

Users.aggregate([ 
    { 
     "$match": 
      { 
       _id: user.id 
      } 
    }, 
    { 
     "$lookup": 
      { 
       from: "Product", 
       localField: "products", 
       foreignField: "_id", 
       as: "products" 
      } 
    } 

]) 
.exec() 
.then((result) => { 
    //your result 

}) 
.catch((err) => { 
    // if any error 
}); 
+0

私はそれが 'localField:" products.productId "'であるべきだと思います。 – Mikey