假设:
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){
......
}
答案 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')
试试让我知道。