2013-05-14 5 views
9

が正しく定義され、以下のスキーマですかwritingwriting: [Schema.Types.Mixed]またはwriting: [{}]する必要がありますか。理解マングースは、[Schema.Types.Mixed]

つまり、辞書の配列 - [{}、{}、{}]がある場合、別のスキーマを作成して埋め込むまで内部構造を事前定義することはできません。それはドキュメントの正しい解釈ですか?

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

var blogSchema = new mongoose.Schema({ 
    title: String, 
    writing: [{ 
     post: String, 
     two: Number, 
     three : Number, 
     four : String, 
     five : [{ a: String, 
        b : String, 
        c : String, 
        d: String, 
        e: { type: Date, default: Date.now }, 
       }] 
    }], 
}); 

感謝。

答えて

18

そのスキーマは問題ありません。配列スキーマ要素内でオブジェクトを定義することは、それ自身のSchemaオブジェクトとして暗黙的に扱われます。そのため彼らは自分_idフィールドを持っていますが、あなたは明示的に無効に_idオプションでスキーマを定義することによって、これを無効にすることができます:大丈夫

var blogSchema = new mongoose.Schema({ 
    title: String, 
    writing: [new Schema({ 
     post: String, 
     two: Number, 
     three : Number, 
     four : String, 
     five : [new Schema({ 
      a: String, 
      b: String, 
      c: String, 
      d: String, 
      e: { type: Date, default: Date.now }, 
     }, {_id: false})] 
    }, {_id: false})], 
}); 
+2

を。その "暗黙のスキーマ"は大きな洞察です。ありがとう。それで、私は.populate()を使ってこれらを処理するべきです。私は配列の辞書から情報を得るのに苦労してきました。 –

+2

@ cathy.sasakiいいえ、これは埋め込みオブジェクトのスキーマです。あなたのスキーマが別のコレクション(モデル)への 'ObjectId'リファレンスを明示的に含んでいるときだけ' populate'を使います。 – JohnnyHK

+1

@JonnyHKそれを入手しました。あなたはmongodbのwizです、あなたがお勧めする特定の本がありますか?あるいは、あなたはドキュメンテーションに乏しいだけでしたか?私はこの正面の知識の基礎を立てようとしています。 –