2015-04-24 5 views
4

Мне нужно сохранить некоторые вспомогательные документы в схеме, которая является вспомогательным документом схемы. Функция сохранения заключается в следующем:Mongoose не сохраняет вложенные вспомогательные документы

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); 
}); 
}; 

Проблема заключается в том, что верхняя родительская схема (Cliente) сохраняется на mongoldb, в то время как два типа вспомогательных документов нет. В cliente.sedi массив заполнен sede objectid, но на mongoldb таблица sede не существует (и то же самое для luoghi_consegna_sedi). Если я вручную сохраняю sede и luoghi_consegna_sedi перед тем, как нажимать их в своих массивах, две таблицы создают и заполняются данными, но если я запустил populate() на cliente.sedi, я получаю пустой массив. В 3 Schemas таков: Cliente

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); 
+0

вопрос обновлен. Спасибо – pindol

ответ

2

Ваши вопросы сохраняют реф на другие документы.

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); 
}); 
+0

cliente.sedi is [Schema.ObjectId]. Если я делаю консольный журнал var cliente, я вижу, что cliente.sedi не существует, а также в sede нет поля luoghi_consegna_sedi, но вместо этого есть lcs (take from req.body). Почему я не могу установить поля luoghi_consegna_sedi и sedi? – pindol

+0

Моя догадка была неправильной. Имеет ли sedi свою схему Schema и cliente.sedi ссылку на схему? –

+0

Да точно. sedi - массив объектов с ref to sede (имя схемы для sedi). – pindol