繁体   English   中英

无法使猫鼬返回null

[英]Can't make populate in mongoose returning null

我试图创建一个FoodItem Schema,在其中我将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的详细信息。

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

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

我为此填充得到的结果是

{
"_id": "5440d008b9215ace25587835",

"measureUnit": null,

"__v": 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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM