Mongoose子文档插入到另一个集合中,同时在父模式中保持关系

时间:2014-03-21 18:09:05

标签: node.js mongodb express mongoose

我正在尝试执行以下操作,并想知道是否可以使用Mongoose:

  1. 保留一系列子文档ID以方便使用mongoose的填充方法。

  2. 将子文档数据存储在另一个集合中

  3. 示例:

    var ParentSchema = new Schema({
        children : [{ type: Schema.ObjectId, ref: 'Child' }]
    });
    mongoose.model('Parent', ParentSchema);
    
    var ChildSchema = new Schema({
        name : { type: String}
    });
    mongoose.model('Child', ChildSchema);
    

    这就是我希望我的数据库看起来像:

    Parents
    {
        children:[{ObjectId("52856528cb28bdc18acac23a")},{ObjectId("52856528cb28bdc18acac23b")}]
    }
    
    Childs
    [{
        _id: ObjectId("52856528cb28bdc18acac23a")
        name: "John"
    },
    {
        _id: ObjectId("52856528cb28bdc18acac23b"),
        name: "bob"
    }]
    

    我希望通过执行以下操作轻松调用populate:

    Parents.find({}).populate(Parents.children).exec();
    

    populate方法是否能够以这种方式连接数据数组?另外,我如何在父模式中存储Id的集合并将子文档存储在子模式中(并且以我稍后可以使用populate方法的方式执行此操作)?

    请注意,此引用:http://mongoosejs.com/docs/subdocs.html执行我想要的操作,但我打算将子文档存储在另一个集合中,而不是作为嵌入文档。

    提前谢谢

    var Child = mongoose.model('Child'),
    Parent = mongoose.model('Parent');
    
    var parent = new Parent;
    var child = new Child({name: "bob"});
    child.save(function(err, child){
        parent.children.push(child);
        parent.save();
    }) 
    

1 个答案:

答案 0 :(得分:2)

此代码有效:

Parents.find({}).populate(children).exec();

因此可以填充位于单独集合中的子文档。