2012-02-18 9 views
19

Estoy tratando referencia otro objeto en un modelo en el nodo,mongodb nodo de referencia de tipo

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

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

pero me sale este error Undefined type at "creator" Did you try nesting Schemas? You can only nest using refs or arrays. creo que quiero usar árbitros, pero no pudo encontrar documentación sobre el mismo, puede alguna uno ayúdame Gracias

Respuesta

34

Encontré la respuesta a mi pregunta, aquí está.

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

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

1. salvavidas 2. ¿Cuál es la diferencia entre 'mongoose.Types.ObjectId' y' mongoose.Schema.ObjectId'? Lo encontré realmente confuso, desencadena errores de "tipo indefinido" y es difícil de entender por qué –

+0

quiero saber la diferencia de mongoose.Types.ObjectId VS mongoose.Schema.ObjectId too! – sunnycmf

0

Aquí está link para manual @ refs.

Tho No puede usar referencias en el nivel de diseño del esquema.

0

decidí a resolver un problema similar para mi proyecto al hacer mi subdocumento un tipo anidado

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

Obviamente esto no funcionará si necesita bar a ser su propio modelo. Tal vez porque lo hace referencia como modelo en otros objetos. En mi caso, esto era todo lo que tenía que hacer, pero la sección Subdocumentos de la guía Mongoose no lo menciona como una opción, así que lo estoy agregando a esta discusión.

16

Me gustaría añadir una respuesta a esta pregunta porque es el primer resultado en Google.

No, no puede usar Esquema anidado como dicen las otras respuestas. Pero aún puedes usar el mismo objeto en diferentes esquemas.

// 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 
}); 

De esta manera se puede modificar el objeto de direcciones para los pondrá a disposición de todos los esquemas que comparten el objeto.

Cuestiones relacionadas