2017-07-18 305 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

你沒有找回'產品',而是一個'用戶'與'產品'陣列。並嘗試刪除'模型:'產品''或'模型':'產品'。 – 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