2013-05-14 21 views
9

è lo schema di seguito definiti correttamente o si fa writing bisogno di essere writing: [Schema.Types.Mixed]owriting: [{}]?comprensione mangusta [Schema.Types.Mixed]

Cioè, se si dispone di una matrice di dizionari - [{}, {}, {}] - non è possibile predefinire la struttura interna a meno che non si crei un altro schema e lo si incorpori. È questa la giusta interpretazione dei documenti?

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 }, 
       }] 
    }], 
}); 

Grazie.

risposta

18

Questo schema va bene. La definizione di un oggetto all'interno di un elemento dello schema di matrice viene implicitamente trattata come il proprio oggetto Schema. In quanto tali, avranno il loro _id campo, ma è possibile disattivare tale definendo in modo esplicito lo schema con l'opzione _id disabilitata:

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

Va bene. Questo "schema implicito" è una grande intuizione. Grazie. Significa che dovrei usare .populate() per lavorare con questi. Ho faticato a ottenere informazioni dai dizionari degli array. –

+2

@ cathy.sasaki No, questo è uno schema per gli oggetti incorporati. Si usa 'populate' solo quando lo schema contiene esplicitamente un riferimento' ObjectId' a un'altra raccolta (modello). – JohnnyHK

+1

@JonnyHK Capito. Sei mago di mongodb, c'è un libro specifico che consigli? O sei semplicemente povero rispetto alla documentazione? Sto cercando di alzarmi per gettare le fondamenta della conoscenza su questo fronte. –