Заселение мангустов в Node JS

Я пытался следить за информацией в Популяции мангустов, но получаю исключение:

MissingSchemaError: схема не зарегистрирована для модели "undefined".

Код у меня выглядит следующим образом:

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;});
    ...
}

И ошибка возникает при заполнении, я несколько раз настраивал ее для разных ответов, найденных на форумах, и я уверен, что это будет что-то простое, но может ли кто-нибудь указать мне правильное направление?

Ваше здоровье.


person Jester    schedule 19.02.2013    source источник


Ответы (2)


В ваших определениях схемы я вижу, что вы определили «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);
});

Надеюсь, это даст вам какую-то точку, чтобы помочь.

person Jone Polvora    schedule 19.02.2013
comment
Большое спасибо, Джон! Должно быть, я скопировал эту часть, чтобы сделать этот объект поля ref в массиве откуда-то, или это была опечатка, в любом случае - теперь все исправлено, Ура! - person Jester; 20.02.2013

у меня была такая же ошибка

Схема не зарегистрирована для модели "Штаты".

иногда также может случиться так, что модель, на которую вы пытаетесь сослаться, не назначена схеме.

как в коде ниже

во-первых: я пытался сослаться на модель «состояний», которую я создал с помощью состояний, но это было не имя модели, а имя было состояниями

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}



});

При этом настоящее название модели было указано

 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}



});
person Raji Rasheed    schedule 24.12.2017