2012-02-18 11 views
19

sto cercando di riferimento un altro oggetto in un modello a nodo,MongoDB nodo di tipo di riferimento

User = new Schema({ 
     username: { 
      type: String, 
      index: {unique: true} 
     } 
}); 

Idea = new Schema({ 
     Creator: { 
      type: User 
     } 
}); 

ma ottengo questo errore Undefined type at "creator" Did you try nesting Schemas? You can only nest using refs or arrays. credo che voglio usare arbitri, ma non sono riuscito a trovare la documentazione su di esso, può alcuni uno mi aiuta. Grazie

risposta

34

Ho trovato la risposta alla mia domanda qui è.

User = new Schema({ 
    username: { 
     type: String, 
     index: {unique: true} 
    } 
}); 

Idea = new Schema({ 
    Creator: { 
     type: Schema.ObjectId, 
     ref: 'User' 
    } 
}); 
+1

1. Life Saver 2. Qual è la differenza tra "mongoose.Types.ObjectId' e" mongoose.Schema.ObjectId'? L'ho trovato davvero confuso, fa scattare errori di tipo "Undefined" ed è difficile capire perché –

+0

voglio sapere il diff di mongoose.Types.ObjectId VS mongoose.Schema.ObjectId troppo! – sunnycmf

0

Qui è link a manual @ refs.

Tho Non è possibile utilizzare i riferimenti a livello di schema.

0

ho deciso di risolvere un problema simile per il mio progetto, rendendo il mio documento secondario di un tipo annidato

Foo = new Schema({ 
     name: String, 
     bar: { 
      name: String 
     } 
    }); 

Ovviamente questo non funzionerà se è necessario bar per essere il proprio modello. Forse perché lo fai riferimento come modello in altri oggetti. Nel mio caso questo era tutto ciò che dovevo fare, ma la sezione Subdocuments della guida di Mongoose non lo menziona come opzione, quindi aggiungo questa discussione.

16

Vorrei aggiungere una risposta a questa domanda perché è il primo risultato su Google.

No, non è possibile utilizzare lo schema annidato come le altre risposte dicono. Ma puoi ancora usare lo stesso oggetto in uno schema diverso.

// Regular JS Object (Not a schema) 
var Address = { 
    address1: String, 
    address2: String, 
    city: String, 
    postalcode: String 
}; 

var Customer = new Schema({ 
    firstname: String, 
    lastname: String, 
    address: Address 
}); 

var Store = new Schema({ 
    name: String, 
    address: Address 
}); 

questo modo è possibile modificare l'oggetto Indirizzo per apportare le modifiche disponibili su tutti i vostri schemi che condividono l'oggetto.

Problemi correlati