sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo hacer referencia a otro esquema en mi esquema Mongoose?

Puede describirlo usando Población

La población es el proceso de reemplazar automáticamente las rutas especificadas en el documento con documentos de otras colecciones. Podemos completar un solo documento, varios documentos, un objeto sin formato, varios objetos sin formato o todos los objetos devueltos por una consulta.

Supongamos que su esquema de eventos se define de la siguiente manera:

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

var eventSchema = Schema({
    title     : String,
    location  : String,
    startDate : Date,
    endDate   : Date
});

var personSchema = Schema({
    firstname: String,
    lastname: String,
    email: String,
    gender: {type: String, enum: ["Male", "Female"]}
    dob: Date,
    city: String,
    interests: [interestsSchema],
    eventsAttended: [{ type: Schema.Types.ObjectId, ref: 'Event' }]
});

var Event  = mongoose.model('Event', eventSchema);
var Person = mongoose.model('Person', personSchema);

Para mostrar cómo se usa poblar, primero cree un objeto de persona, aaron = new Person({firstname: 'Aaron'}) y un objeto de evento, event1 = new Event({title: 'Hackathon', location: 'foo'}) :

aaron.eventsAttended.push(event1);
aaron.save(callback); 

Luego, cuando realice su consulta, puede completar referencias como esta:

Person
.findOne({ firstname: 'Aaron' })
.populate('eventsAttended') // only works if we pushed refs to person.eventsAttended
.exec(function(err, person) {
    if (err) return handleError(err);
    console.log(person);
});