0

我试图创建一个 FoodItem 架构,在其中我将 measureUnit 作为另一个页面模型的对象引用。

这是存在 measureUnit 的 MeasureTypesSchema。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 的详细信息。

4

2 回答 2

0

我尝试从 FoodItem 填充 measureUnit 并得到一个空值。

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

我为这个填充得到的结果是

{
"_id": "5440d008b9215ace25587835",

"measureUnit": null,

"__v": 0
}         
于 2014-10-17T11:01:18.900 回答
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/

于 2014-10-21T11:12:53.290 回答