Mongoose不保存嵌套的子文档

我需要将一些子文档保存在模式的子文档模式中。 保存function是这样的:

exports.add = function(req, res){ var cliente = new Cliente(req.body); var sedi = []; for(var key in req.body.sede){ var sede = new Sede(req.body.sede[key]); var luoghi_consegna_sedi = []; for(jey in req.body.sede[key].lcs){ var luogo_consegna_sede = new LuoghiConsegnaSede(req.body.sede[key].lcs[jey]); //Sub document luoghi_consegna_sedi.push(luogo_consegna_sede); } sede.luoghi_consegna_sedi = luoghi_consegna_sedi; //Sub docuemnt sedi.push(sede); } cliente.sedi = sedi; cliente.save(function(err){ if(err) return res.sendStatus(400); return res.json(cliente); }); }; 

问题在于顶层父模式(客户)保存在mongoldb上,而这两种子文件则没有。 在cliente.sedi中,数组填充了sede objectid,但是在mongoldb上,sede表不存在(对于luoghi_consegna_sedi也是如此)。 如果我手动保存sede和luoghi_consegna_sedi然后将它们推入他们的数组中,这两个表创build并填充数据,但是如果我运行cliente.sedi上的populate(),我得到一个空数组。 这3个模式是这样的:客户

 var mongoose = require('mongoose'), Schema = mongoose.Schema; var ClienteSchema = new Schema({ data_status: String, status_cliente: Number, titolo_cliente: String, cognome: String, nome: String, ragione_sociale: String, codice_fiscale: String, partita_iva: String, data_nascita: String, luogo_nascita: String, business: { type: Boolean, default: false }, consumer: { type: Boolean, default: false }, sedi: { type: [Schema.ObjectId], ref: 'Sede' }, eliminato: { type: Boolean, default: false }, created: { type: Date, default: Date.now } }); ClienteSchema.set('toJSON', {getters: true}); mongoose.model('Cliente', ClienteSchema); 

塞德

 var mongoose = require('mongoose'), Schema = mongoose.Schema; var SedeSchema = new Schema({ denominazione_sede: String, tipo_sede: String, tipo_indirizzo: String, indirizzo: String, numero_civico: String, citofonare: String, interno: String, piano: String, scala: String, citta: String, provincia: String, cap: String, regione: String, paese: String, telefono_1: String, telefono_2: String, email: String, agente_assegnato_1: { type: Schema.ObjectId, ref: 'User' }, agente_assegnato_2: { type: Schema.ObjectId, ref: 'User' }, agente_assegnato_3: { type: Schema.ObjectId, ref: 'User' }, agente_assegnato_4: { type: Schema.ObjectId, ref: 'User' }, agente_assegnato_5: { type: Schema.ObjectId, ref: 'User' }, agente_assegnato_jolly: { type: Schema.ObjectId, ref: 'User' }, titolo_rif: String, cognome_rif: String, nome_rif: String, cellulare_rif: String, email_rif: String, telefono_rif: String, luoghi_consegna_sedi:{ type: [Schema.ObjectId], ref: 'LuoghiConsegnaSede' }, eliminato: { type: Boolean, default: false }, created: { type: Date, default: Date.now } }); SedeSchema.set('toJSON', {getters: true}); mongoose.model('Sede', SedeSchema); 

Luoghi_consegna_sedi

 var mongoose = require('mongoose'), Schema = mongoose.Schema; var LuoghiConsegnaSedeSchema = new Schema({ titolo_rif: String, cognome: String, nome: String, tipo_sede_consegna: String, sede_consegna: String, telefono_1: String, telefono_2: String, cellulare_rif: String, email_rif: String, telefono_rif: String, tipo_indirizzo_consegna: String, indirizzo_consegna: String, n_civico_consegna: String, piano_consegna: String, interno_consegna: String, scala_consegna: String, citofonare_consegna: String, citta_consegna: String, provincia_consegna: String, regione_consegna: String, cap_consegna: String, paese_consegna: String, eliminato: { type: Boolean, default: false }, created: { type: Date, default: Date.now } }); LuoghiConsegnaSedeSchema.set('toJSON', {getters: true}); mongoose.model('LuoghiConsegnaSede', LuoghiConsegnaSedeSchema); 

你的问题是保存参考其他文件。

 cliente.sedi = []; for(var key in req.body.sede){ var sede = new Sede(req.body.sede[key]); var luoghi_consegna_sedi = []; for(jey in req.body.sede[key].lcs){ var luogo_consegna_sede = new LuoghiConsegnaSede(req.body.sede[key].lcs[jey]); // save luogo_consegna_sede and then push its _id luogo_consegna_sede.save(); luoghi_consegna_sedi.push(luogo_consegna_sede._id); } sede.luoghi_consegna_sedi = luoghi_consegna_sedi; // Save sede and then push its id sede.save(); cliente.sedi.push(sede._id); } cliente.save(function(err){ if(err) return res.sendStatus(400); return res.json(cliente); });