2012-05-21 33 views
0

以從這裏如何使用Mongoose填充來存儲ObjectId以外的數據?

http://mongoosejs.com/docs/populate.html

的例子。如果我試圖調整它讓 '粉絲' 還包含一個等級

var db = require('houselib/db'); 
var Schema = db.Schema; 
var mongoose = db.mongoose; 

var PersonSchema = new Schema({ 
    name : String 
    , age  : Number 
    , stories : [{ type: Schema.ObjectId, ref: 'Story' }] 
}); 

var StorySchema = new Schema({ 
    _creator : { type: Schema.ObjectId, ref: 'Person' } 
    , title : String 
    , fans  : [{ type: Schema.ObjectId, ref: 'Person', rating: Number}] 
}); 

var Story = mongoose.model('Story', StorySchema); 
var Person = mongoose.model('Person', PersonSchema); 

var aaron = new Person({ name: 'Aaron', age: 100 }); 

aaron.save(function (err) { 
    if (err) throw err; 

    var story1 = new Story({ 
     title: "A man who cooked Nintendo" 
    , _creator: aaron._id 
    , fans: [{type: aaron._id, rating: 4}] 
    }); 

    story1.save(function (err) { 
    if (err) throw err; 
     Story 
     .find({ _creator: aaron._id }) 
     .populate('_creator') // <-- not really necessary 
     .run(function (err, stories) { 
      if (err) throw err; 
      console.log('The stories JSON is an array: ', stories); 
     }) 
    }); 

}) 

我收到以下錯誤

CastError: Cast to undefined failed for value "[object Object]"

回答

0

story.fans是一組objectids。目標確實不能收視率。您需要將評分添加到Person模式而不是故事模式。

var PersonSchema = new Schema({ 
    name : String 
    , age  : Number 
    , rating: Number 
    , stories : [{ type: Schema.ObjectId, ref: 'Story' }] 
}); 
+0

但是一個人沒有評分。粉絲給出一個特定故事的評分。我認爲DBRef不是正確的方法,手動鏈接是一條路 – deltanovember

相關問題