node.js - 在Mongoose中填充嵌入文档

时间:2016-07-15 02:24:41

标签: javascript node.js mongodb express mongoose

假设:

var productSchema = new Schema({
  name: String,
  details : [{ name: String,  description: String }]
})


var listSchema = new Schema({
  name: String,
  products: [{
    product_id: { type: Schema.Types.ObjectId, ref: 'Product' },
    product_vid: { type: Schema.Types.ObjectId, ref: 'Product.details' }
    }]
})

如何仅使用相应的product_id对List进行查询,其中一个详细信息与product_vid相匹配?

List.findById(list_id)
    .populate({
       path: 'products.product_id',
       populate: {
         path: 'products.product_vid'
       }
     })
     .exec(function(err, doc){
       ......
}

2 个答案:

答案 0 :(得分:3)

没有必要

product_vid: {
type: Schema.Types.ObjectId, ref: 'Product.details'}
listSchema中的

var productSchema = new Schema({
name: String,
details : [{ name: String,  description: String }]
     })


var listSchema = new Schema({
   name: String,
   products: [{ type: Schema.Types.ObjectId, ref: 'Product' }])

      List.findById(list_id)
        .populate({
              path: 'products',
              match: { details: "your matching value"})
           .exec(function(err, doc){
                  ......
      }

答案 1 :(得分:0)

这是错误的

product_vid: { type: Schema.Types.ObjectId, ref: 'Product.details' }

细节是模型的领域。而不是模仿自己。

它应该是......

 var listSchema = new Schema({
   name: String,
   products: [{ type: Schema.Types.ObjectId, ref: 'Product' }],
})

然后

 populate('products')

或者可能

 populate('products products.details')

试试让我知道。