2014-10-17 90 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 
}