tutorial relaciones relacion principiantes para node muchos libro framework español crear node.js mongodb mongoose mongodb-query mongoose-schema

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.