猫鼬:父母在没有参考的情况下填充

时间:2014-09-08 09:28:34

标签: node.js mongodb mongoose

在我的node.js + 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' }]
});

现在,我可以通过以下方式填充所有故事:

Person.findOne({ name: "some name"}).populate('stories').exec(...);

最近我意识到,像故事那样不断增长的数组会降低巨大数组的性能。所以我想改变它,因为在我的情况下,阵列增长非常快并且变得巨大。我的解决方案似乎很容易。我将人员架构更改为

var PersonSchema = new Schema({
    name    : String
  , age     : Number
});

只有StorySchema持有裁判。

现在的问题是:有没有办法或解决方法来填充我个人的故事?

2 个答案:

答案 0 :(得分:1)

你总是可以这样做:

var Script = mongoose.model('Script');  
Person.findOne({ name: "some name" }, function(err, person) {
    Script.find({ _creator: person._id }, function(err, scripts) {
        person.scripts = scripts;
        ...
    })
})

希望这可能会有所帮助。

答案 1 :(得分:0)

查看新功能"填充虚拟广告",它将让您的生活更轻松