无法在mongoose中填充返回null

时间:2014-10-17 11:01:19

标签: node.js mongodb mongoose mongoose-populate

我正在尝试创建一个FoodItem模式我将measureUnit作为另一个页面模型的对象引用。

这是MeasureUnitSchema,其中包含measureUnit。 MeasureTypes是MetricsSchema中的嵌入式数组文档。我正在导出MeasureTypesSchema的模型(MeasureTypes)和MetricsSchema的模型(Metrics)。

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,我将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的详细信息。

2 个答案:

答案 0 :(得分:0)

我尝试从FoodItem填充measureUnit并获得null。

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

我获得此填充的结果是

{
"_id": "5440d008b9215ace25587835",

"measureUnit": null,

"__v": 0
}         

答案 1 :(得分: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');

在每个模式文件中,您需要Mongoose,定义模式和构建模型,例如:

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');

有关更多信息和背景信息,请查看关于Mongoose连接和用法的博文:http://theholmesoffice.com/mongoose-connection-best-practice/