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

あなたのスキーマ定義では、Second スキーマで「first_id」を配列として定義していることがわかります。リレーショナル データベースと比較すると、これは、親テーブルが 2 番目のコレクションであり、1 番目のコレクションが子である 1 対多の関係のようなものになります。次に、2番目に最初のものを入力しようとして間違っています。

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 に答える