【问题标题】:Can't make populate in mongoose returning null无法在返回 null 的 mongoose 中填充
【发布时间】:2014-12-12 22:51:52
【问题描述】:

我正在尝试创建一个 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的详细信息。

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-populate


    【解决方案1】:

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

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

    我得到的这个填充结果是

    {
    "_id": "5440d008b9215ace25587835",
    
    "measureUnit": null,
    
    "__v": 0
    }         
    

    【讨论】:

      【解决方案2】:

      听起来好像您的模型分布在不同的文件中。原则上这很好,但应该将整个模型放在一起,以便整个应用程序都可以访问它。

      在应用程序主文件(通常是 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-11-02
        • 2019-06-17
        • 1970-01-01
        • 2014-11-20
        • 2020-11-11
        • 1970-01-01
        • 2013-06-30
        • 2020-11-24
        • 1970-01-01
        相关资源
        最近更新 更多