Estoy tratando de crear un documento en Mongo DB que tiene un documento incrustado dentro. El modelo/esquema del documento es el siguiente:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; // Cupboard Collection Schema var ShelfSchema = new Schema({ shelf_name: { type: String }, shelf_desc: { type: String } }); var CupboardSchema = new Schema({ cupboard_name: { type: String, required: true, unique: true }, cupboard_desc: { type: String, required: true }, shelf: [ShelfSchema] }, { timestamps: true }); module.exports = mongoose.model('Cupboard', CupboardSchema); La imagen muestra el código para guardar el documento. 
Cuando imprimo el "nuevo armario" en la consola, obtengo el documento en el formato exacto de la siguiente manera:
{ _id: 58e4b972931dc809f4127b0b cupboard_name: Cupboard A, cupboard_desc: Cupboard A Details, shelf: [ { shelf_name: Cupboard A, shelf_desc: Cupboard A Details, _id: 58e4c2742bfc0111dc47f149 }] }Pero después de la ejecución, el documento incrustado no se guarda y no se muestra ningún error. El resultado final es el que se muestra a continuación:
{ _id: 58e4b972931dc809f4127b0b cupboard_name: Cupboard A, cupboard_desc: Cupboard A Details }¿Alguien puede ayudarme a resolver esto? ¿Por qué el documento incrustado no se guarda en mongo db?
Gracias.
No guarda el documento incrustado como el documento completo dentro de otro documento. Tendrá que guardar el '_id' del documento y, en el momento de obtener el registro, llamará a populate() en la consulta.
Entonces, supongamos que tiene que guardar el documento en el esquema de Cupboard, el esquema se verá así:
var CupboardSchema = new Schema({ cupboard_name: { type: String, required: true, unique: true }, cupboard_desc: { type: String, required: true }, shelf: { type: Schema.Types.ObjectId, ref: 'ShelfSchema'} }, { timestamps: true }); Ahora, en 'estantería', guarde el documento correspondiente que desea completar. Y cuando busque el documento, llame a populate() como:
CupboardSchemaModel.find({_id: <some-id-you-want-to-fetch>}).populate('shelf');