2013-02-19 152 views
3

我一直在試圖遵循信息Mongoose Population,但我發現了異常:貓鼬填充在節點JS

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

而就填入,我已經調整了它的次數,以在論壇上找到不同的答案出現錯誤,而且我敢肯定,這會很簡單,但是有人能指出我的方向嗎?

乾杯。

回答

6

在您的模式定義中,我看到您已將'first_id'定義爲第二個模式中的數組。與關係數據庫相比,這將像父表格是第二個集合,First集合是子集的一對多關係。然後你做錯了試圖用第一個填充第二個。

假設我有一個Users集合和一個Clients集合,其中每個客戶端都有一個與之相關的用戶。那麼代碼將是:

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://userName:[email protected]: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); 
}); 

希望這給你一些幫助。

+0

非常感謝,約翰!我必須複製那部分內容,以便將ref字段對象從某個地方放入數組中,或者它是一個錯字 - 現在都是固定的,乾杯! – Jester 2013-02-20 11:56:22

0

我有同樣的錯誤

架構尚未註冊模型「國家」。

有時也可能是您嘗試引用的模型未分配給模式。

像下面

第一代碼:我試圖引用「狀態」模式,我與各國創造,但它是不是模型,而不是名字的名稱

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} 



});