2017-01-30 210 views
0

我在尝试使猫鼬的填充功能起作用时遇到了最可怕的麻烦。我已经看过这里的所有主题,没有任何帮助。我的模式映射如下。猫鼬填充方法

'use strict'; 

/** 
* Module dependencies. 
*/ 
var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 


/** 
* Prodcut Feature Extra 
*/ 
var extra = new Schema({ 
    name: { 
    type: String, 
    default: '', 
    required: 'Please fill Product name', 
    trim: true 
    }, 
    price: { 
    type: Number, 
    default: 0 
    }, 
    description: { 
    type: String, 
    trim: true 
    }, 
    toolTip: { 
    type: String, 
    trim: true, 
    min: 3, 
    max: 140 
    }, 
    created: { 
    type: Date, 
    default: Date.now 
    }, 
    user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
    } 
}); 

/** 
* Product Feature Schema 
*/ 
var feature = new Schema({ 
    name: { 
    type: String, 
    default: '', 
    required: 'Please fill feature name', 
    trim: true 
    }, 
    created: { 
    type: Date, 
    default: Date.now 
    }, 
    user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
    } 
}); 

/** 
* Product Schema 
*/ 
var ProductSchema = new Schema({ 
    name: { 
    type: String, 
    default: '', 
    required: 'Please fill Product name', 
    trim: true 
    }, 
    created: { 
    type: Date, 
    default: Date.now 
    }, 
    features: [feature], 
    extras: [extra], 
    user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
    } 
}); 

mongoose.model('Feature', feature); 
mongoose.model('Extra', extra); 
mongoose.model('Product', ProductSchema); 

我已经尝试了所有下面的查询在猫鼬REPL但没有任何工程

models.Product.find().populate("Extra", "name").exec() 
 
models.Product.find().populate({path: "extras", location: "Extra"}).exec() 
 
models.Product.find().populate('extras', 'name').exec() 
 
models.Product.find().populate('extras', 'Extra').exec()

有没有人有什么建议?这是杀了我!

+0

请出示什么 “但没有工作” 的意思。有错误吗? –

+0

不确定您使用的Mongoose版本是什么,但我从来没有将Schema.ObjectId看作是有效的类型。这应该是“Schema.Types.ObjectId” - 应该至少导致架构验证错误... – SylonZero

+0

你想实现什么?在你的架构中,'extras'不是一个引用,而是一个嵌入式文档,它不应该像这样工作。请解释你真正想要的,然后我们可以帮助你。 –

回答

1

只是好奇!

下面的初始化不需要在ProductSchema中引用之前完成?

mongoose.model('Feature', feature); 
mongoose.model('Extra', extra); 

像这样的事情

mongoose.model('Feature', feature); 
mongoose.model('Extra', extra); 

var ProductSchema = new Schema({ 
name: { 
type: String, 
default: '', 
required: 'Please fill Product name', 
trim: true 
}, 
created: { 
    type: Date, 
    default: Date.now 
}, 
features: [ { 
    type: Schema.ObjectId, 
    ref: 'Feature' 
}], 
extras: [ { 
    type: Schema.ObjectId, 
    ref: 'Extra' 
}], 
user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
} 
}); 

比这应该工作

models.Product.find().populate("extras")