5

我一直在尝试关注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;});
    ...
}

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

干杯。

4

2 回答 2

9

在您的架构定义中,我看到您已将“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);
});

希望这能给你一些帮助。

于 2013-02-19T06:04:52.960 回答
0

我有同样的错误

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

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

就像在下面的代码中

首先:我试图引用我用 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}



});
于 2017-12-24T10:39:46.520 回答