2016-09-04 8 views
2

MongoDBでサブドキュメントを使用し始めました。MongoDBのネストされたスキーマ

私は、私は、各スキーマのためのモデルを2つのスキーマ

childrenSchema = new Schema({ 
    name: String 
}); 

parentSchema = new Schema({ 
    children: [childrenSchema] 
}); 

を作成する必要がありますしているか、それだけでparentSchemaするためのモデルを持っているのがベストでしょうか?

私はリレーショナルクエリを使用したくないので、それぞれのモデルを作成する利点はありません。

答えて

0

Parentにはmodelを1つ作成することをお勧めします。pushChildにすることができます。

この場合、deleting親は自動的にdeleteも子供になります。しかし、子ども用に別のモデルを作成した場合は、deleteのがparentになる前に、deleteの場合はparentとなります。

あなたがParentの​​にchildを削除したくない場合は代替

、あなたは子供を保存するためのreferenceの代わりsub-documentcreate 2モデル、ChildためParentと別のもの、とを使用する必要があります。この方法では、子ドキュメント全体を親ドキュメントに保存する必要はありません。ちょうど_idが行います。後で、mongoose populateを使用して、子供に関する情報を取得できます。

childrenSchema = new Schema({ 
    name: String 
}); 

var child = mongoose.model('child',childrenSchema); 

parentSchema = new Schema({ 
    children: [{type : Schema.Types.ObjectId , ref : 'child'}] 
}); 
0

この場合、以下のようにします。

別の定義、スキーマ、以下のようにモデル:

1)DB/definitions.js:

const 
    mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 

    Child = { 
    name: { 
     type: Schema.Types.String, 
     required: true, 
     index: true 
    } 
    }, 

    Parent = { 
    name: { 
     type: Schema.Types.String, 
     required: true, 
     index: true 
    }, 
    children: { 
     type: [ChildSchemaDefinition], 
     index: true, 
     ref: 'Child'; 
    } 
    }; 

module.exports = { 
    Child, 
    Parent 
}; 

2)DB/schemas.js:

const 
    mongoose = require('mongoose'), 
    Schema = mongoose.Schema, 
    definitions = require('./definitions'); 
    Child = new Schema(definitions.Child), 
    Parent = new Schema(definitions.Parent); 

module.exports = { 
    Child, 
    Parent  
}; 

3)DB /models.js:

const 
    mongoose = require('mongoose'), 
    Model = mongoose.model, 
    schemas = require('./schemas'); 

const 
    Child = Model('Child', schemas.Child), 
    Parent = Model('Parent', schemas.Parent); 

module.exports = { 
    Child, 
    Parent 
}; 
関連する問題