2012-04-11 2 views
0

Я создал форму, где у меня есть определенные поля. У меня также есть поле, содержащее массив полей внутри. «Req.body.lead» вывод поля:Как сохранить объект внутри mongodb

// output of console.log("req.body.lead",req.body.lead); 
    business_address_attributes: 
     { address_type: 'Business', 
     street1: 'Street 1...', 
     street2: 'Street 2...', 
     city: 'City...', 
     state: 'State...', 
     zipcode: 'Zip Code...', 
     country: '' }, 

можно хранить весь объект внутри другого объекта, как:

 var address = new Addresses(req.body.lead.business_address_attributes); 

внутри MongoDB я объявил поле как:

business_address_attributes : [Addresses], 
    //Note: [Addresses] refers to address class 

Теперь, когда я пытаюсь сохранить внутри monogdb используя следующее, я получаю сообщение об ошибке, не в силах спасти привести

var lead = new Leads(req.body.lead); 
var address = new Addresses(req.body.lead.business_address_attributes); 
lead.business_address_attributes.$push(address); 
lead.save(); 
// console.log(lead.business_address_attributes) now gives following output: 
    [ { address_type: 'Business', 
    street1: 'Street 1...', 
    street2: 'Street 2...', 
    city: 'City...', 
    state: 'State...', 
    zipcode: 'Zip Code...', 
    country: '', 
    _id: 4f857a2e491383dc64000008 } ] 

Я не знаю, как решить problem.Can кто-то помощь.

ответ

0

Мое решение этой проблемы состояло в том, чтобы объявить поле с массивом документов в качестве ссылочного массива.

Создать схему для Address документа:

var AddressSchema = new Schema({ 
    //attributes 
    }); 

и создать модель:

mongoose.model('address', AddressSchema)

Теперь в родительском документе вы можете сказать

business_address_attributes : [{ type: Schema.ObjectId, ref: 'address' }] 

При создании новый документ, сначала создайте адресный документ, сохранить его, получить идентификатор сохраненного документа и вставить его в lead.business_address_attributes.

Чтобы вернуть документ с адресами, а не только идентификаторы, используйте метод populate('business_address_attributes') mongoose.