MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como referenciar outro esquema no meu esquema Mongoose?


Você pode descrevê-lo usando População

População é o processo de substituir automaticamente os caminhos especificados no documento por documentos de outras coleções. Podemos preencher um único documento, vários documentos, objeto simples, vários objetos simples ou todos os objetos retornados de uma consulta.

Suponha que seu Esquema de Evento seja definido da seguinte forma:
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 como o preenchimento é usado, primeiro crie um objeto de pessoa, aaron = new Person({firstname: 'Aaron'}) e um objeto de evento, event1 = new Event({title: 'Hackathon', location: 'foo'}) :
aaron.eventsAttended.push(event1);
aaron.save(callback); 

Então, ao fazer sua consulta, você pode preencher referências 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);
});