【问题标题】:Mongoose Populate in Node JS在 Node JS 中填充 Mongoose
【发布时间】:2013-02-03 16:17:35
【问题描述】:

我一直在尝试关注Mongoose Population 中的信息,但我遇到了异常:

MissingSchemaError:尚未为模型“未定义”注册架构。

我的代码是这样的:

mongoose = require('mongoose');
Schema = mongoose.Schema;
mongoose.connect(MONGO_SERVER);
ObjectId = Schema.ObjectId;

var FirstSchema = new Schema({
    label       : String
});
var SecondSchema = new Schema({
    first_id           : [{ type: mongoose.Schema.ObjectId, ref: 'First' }],
    type           : String,
    ...
});
var first= mongoose.model('First', FirstSchema);
var second= mongoose.model('Second', SecondSchema);

function test() {
    ...
    second.find({}).populate('first_id').exec(function(err,data){return true;});
    ...
}

错误发生在填充上,我已经根据论坛上的不同答案对其进行了多次调整,我相信这会很简单,但有人能指出我正确的方向吗?

干杯。

【问题讨论】:

    标签: schema mongoose populate


    【解决方案1】:

    在您的架构定义中,我看到您已将“first_id”定义为第二架构中的数组。与关系数据库相比,这将类似于一对多的关系,其中父表是第二个集合,而第一个集合是子表。那么你在尝试用第一个填充第二个时做错了。

    假设我有一个 Users 集合和一个 Clients 集合,其中每个客户端都有一个与之相关的用户。那么代码将是:

    var mongoose = require('mongoose');
    mongoose.connect('mongodb://userName:password@server:port/dbname');
    var conn = mongoose.connection;
    conn.on('error', console.error.bind(console, 'connection error:'));
    conn.once('open', function callback () {
        console.log('connected ');
    });
    
    var user = mongoose.Schema({
        userName: String
    });
    
    var client = mongoose.Schema({
        fk_user: { type: mongoose.Schema.ObjectId, ref: 'Users' },
        name: String
    });
    
    var UserModel = mongoose.model('Users', user);
    var ClientModel = mongoose.model('Clients', client);
    
    ClientModel.findOne().populate('fk_user').exec(function(err, c) {
        if (err) { return console.log(err); }
    
        console.log(c.fk_user.userName);
    });
    

    希望这能给你一些帮助。

    【讨论】:

    • 非常感谢,约翰!我一定是在那个部分复制了那个 ref 字段对象从某个地方到一个数组中,或者它是一个错字,无论如何 - 现在一切都修复了,干杯!
    【解决方案2】:

    我有同样的错误

    尚未为模型“States”注册架构。

    有时也可能是您尝试引用的模型未分配给架构。

    就像下面的代码一样

    首先:我试图引用我使用 States 创建的“states”模型,但它不是模型的名称,而是名称是 states

    var CountriesSchema = new Schema({
    
    name:{ type:String,required:true},
    capital:{type:String},
    description:{type:String},
    cord:{
    
        latitude:{type:Number},
        longitude:{type:Number}
    
    },
    state:[{type:Schema.Types.ObjectId , ref:'States'}],
    date_created:{type:Date},
    date_modeified:{type:Date}
    
    
    
    });
    

    同时模型的真实名称是 states

     var State = mongoose.model('states',StateSchema) ;
    
    module.exports = State ;
    

    我所做的只是将状态更改为状态

    var CountriesSchema = new Schema({
    
        name:{ type:String,required:true},
        capital:{type:String},
        description:{type:String},
        cord:{
    
            latitude:{type:Number},
            longitude:{type:Number}
    
        },
        state:[{type:Schema.Types.ObjectId , ref:'states'}],
        date_created:{type:Date},
        date_modeified:{type:Date}
    
    
    
    });
    

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 2017-05-19
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多