Mongoose - Child Schema引用Parent Subdocument

时间:2016-02-29 02:15:44

标签: javascript node.js mongodb mongoose

是否可以使用类似于以下内容的Mongoose Schema:

var categorySchema = new Schema({
    name : String
});

var childSchema = new Schema({
   name : String,
   category : {
      type : Schema.Types.ObjectId,
      ref : 'parent.categories'
   }
});

var parentSchema = new Schema({
    categories : [categorySchema],
    children : [childSchema]
});

基本上,孩子只能拥有其父母所包含的类别。我正在尝试做什么?如果不是最干净的方法是什么?

1 个答案:

答案 0 :(得分:3)

如果name中只有一个字段categorySchema,您可以将其放入parentSchema,而不是population,如下所示,

var childSchema = new Schema({
   name : String,
   category : {
      name: String
   }
});

var parentSchema = new Schema({
    categories : [{name: String}],
    children : [childSchema]
});

当尝试将新child插入parent时,您可以先查询parent,然后重复categories以获取现有的children并将其添加到parent },保存Parent.find({_id: parent._id}) .exec(function(err, p) { if (err) throw err; var p = new Child({name: 'tt'}); p.categories.forEach(function(c) { if (c /*find the match one*/) { p.category = c; // assign the existing category to children } }); // save this parent p.save(function(err) {...}); }); 作为最后一个,示例代码如下

categorySchema

如果Parent中有许多字段,可以将其定义为单个模式可以是一个选项,如果var categorySchema = new Schema({ name : String, // other fields.... }); var Category = mongoose.model('Category', categorySchema); var childSchema = new Schema({ name : String, category : {type : Schema.Types.ObjectId, ref : 'Category'} }); var parentSchema = new Schema({ categories : [{type : Schema.Types.ObjectId, ref : 'Category'}], children : [childSchema] }); 中有许多类别使父集合过大。

children

尝试将新的parent添加到keyUp文档时的逻辑相同。