node.js - relaciones - populate mongodb
Referencias de documentos de mangosta con una relación de uno a muchos (2)
Como decían los population
var aaron = new Person({ _id: 0, name: ''Aaron'', age: 100 });
aaron.save(function (err) {
if (err) return handleError(err);
var story1 = new Story({
title: "Once upon a timex.",
_creator: aaron._id // assign the _id from the person
});
story1.save(function (err) {
if (err) return handleError(err);
// thats it!
});
//then add story to person
aaron.stories.push(story1);
aaron.save(callback);
});
Estoy trabajando en el diseño de una estructura de base de datos para un nuevo proyecto, y soy bastante nuevo en MongoDB, y obviamente en Mongoose.
He leído la documentación de population Mongooses, donde tiene una relación de uno a varios, con un documento de una Person
con muchos documentos de Story
, pero la parte que me confunde es dónde, en lugar de los documentos de la Story
, a qué documento de Person
pertenece, el Person
esquema de la Person
tiene configurado, por lo que tiene una matriz de lo que la Story
documenta que "posee".
Estoy configurando algo muy similar a esto. Pero sigo pensando que sería más fácil al crear nuevos documentos de Story
tener el ID de documento de Person
. Pero tal vez eso es solo porque estoy más familiarizado con las relaciones de MySQL usando uniones.
Si esta es la mejor manera de hacerlo (y estoy seguro de que lo es, ya que está en los documentos), cuando se crean nuevos documentos de la Story
, ¿cuál es la mejor manera de actualizar el conjunto de historias en el documento de People
asociado al que pertenece? ? Busqué, pero no pude encontrar ningún ejemplo de actualización de documentos existentes para agregar referencias a otros documentos (o eliminarlos)
Estoy seguro de que esta es una solución fácil que acabo de pasar por alto o algo así, pero cualquier ayuda sería genial. ¡Gracias!
Refiérase a la population , aquí extraemos un ejemplo de Mangosta.
var mongoose = require(''mongoose'')
, Schema = mongoose.Schema
var personSchema = Schema({
_id : Number,
name : String,
age : Number,
stories : [{ type: Schema.Types.ObjectId, ref: ''Story'' }]
});
var storySchema = Schema({
_creator : { type: Number, ref: ''Person'' },
title : String,
fans : [{ type: Number, ref: ''Person'' }]
});
var Story = mongoose.model(''Story'', storySchema);
var Person = mongoose.model(''Person'', personSchema);
Así que el ejemplo sobre, el modelo de Story
almacena Person._id
relacionado en Story._creator
. Cuando encuentre un documento de Story
, puede usar el método populate()
para definir qué atributo en el modelo de Person
que desea recuperar al mismo tiempo, como:
Story.findOne({_id: ''xxxxxxx''}).populate(''person'', ''name age'').exec(function(err, story) {
console.log(''Story title: '', story.title);
console.log(''Story creator'', story.person.name);
});
Creo que esto es lo que buscas. O bien, puede utilizar colecciones anidadas en su lugar.