2014-10-17 81 views
0

我试图创建一个FoodItem架构在其中我保留了measureUnit作为另一个页面模型的对象引用。无法填充猫鼬返回null

这是MeasureTypesSchema,其中存在measureUnit。 MeasureTypes是MetricsSchema中的嵌入式数组文档。我正在导出MeasureTypesSchema的模型(MeasureTypes)和MetricsSchema的模型(度量标准)。

var mongoose = require('mongoose'); 
Schema = mongoose.Schema; 

var MeasureTypesSchema = new mongoose.Schema({     
measureUnit:{type:String,required:true},     
code:{type:String,required:true}       

}); 
var MeasureTypes = mongoose.model('MeasureTypes', MeasureTypesSchema); 
module.exports = MeasureTypes; 



var MetricsSchema = new mongoose.Schema({      
organisation:{type: Schema.Types.ObjectId, ref: 'Organisation'}, 
MeasureTypes:[MeasureTypesSchema] 

}); 
var Metrics = mongoose.model('Metrics', MetricsSchema); 
module.exports = Metrics; 

这是FoodItemSchema其中i保持measureUnit从目前MeasureTypes模型是另一个页面的对象引用

var mongoose = require('mongoose'); 
Schema = mongoose.Schema; 

var FoodItemSchema = new mongoose.Schema({ 

measureUnit:{type: Schema.Types.ObjectId, ref:'MeasureTypes',required:true},   

}); 

var FoodItem = mongoose.model('FoodItem', FoodItemSchema); 
module.exports = FoodItem; 

我需要得到measureUnit的细节时,我填写,如何填充,这样我获取measureUnit的详细信息。

回答

0

这听起来就好像你的模型在不同的文件传播。原则上这很好,但整个模型应该汇集在一起​​,以便整个应用程序都可以访问它。

在应用主文件(通常app.js),你在你的数据库连接和型号

var db = require('./model/db') 

在/model/db.js带给你可以连接到你的数据库,并导入了一些架构文件:

// Bring Mongoose into the app 
var mongoose = require('mongoose'); 

// Build the connection string 
var dbURI = 'mongodb://localhost/ConnectionTest'; 

// Create the database connection 
mongoose.connect(dbURI); 

// BRING IN YOUR SCHEMAS & MODELS 
// For example 
require('./metrics'); 
require('./fooditems'); 

在每一个你需要的猫鼬的模式文件,定义模式和建立的模型,例如:

var mongoose = require('mongoose'); 

var MeasureTypesSchema = new mongoose.Schema({     
    measureUnit:{type:String,required:true},     
    code:{type:String,required:true}       
}); 

mongoose.model('MeasureTypes', MeasureTypesSchema); 

我还没有尝试在单独的文件中定义引用的模式;如果这继续导致问题,我会尝试将它们全部放入同一个文件中。

最后在要使用模型的页面上,需要Mongoose并再次导入模型。

var mongoose = require('mongoose'), 
    MeasureTypes = mongoose.model('MeasureTypes'); 

欲了解更多信息和背景来看看我的博客文章在猫鼬的连接和使用:http://theholmesoffice.com/mongoose-connection-best-practice/

0

我试着从FoodItem填充measureUnit并得到一个null。

FoodItem.findById(foodId).lean().populate({path:'measureUnit'}).exec(function (err, food)       
{ console.log(food);} 

我得到这个填充结果是

{ 
"_id": "5440d008b9215ace25587835", 

"measureUnit": null, 

"__v": 0 
}