2014-02-05 7 views
2

У меня проблема с сохранением вложенных поддогов - не уверен, что из-за того, что это не массив или что-документы, кажется, предполагают, что вложенные объекты автоматически сохраняются, но они не в этом случае.Сохранение вложенной схемы Mongoose

Ребенок схемы:

var Address = new Schema({ 
    phone: String, 
    name: String, 
    street: { type: String, required: true } 
}); 

Основная схема:

var Order = new Schema({ 
    code: { 
    type: String 
    }, 
    address: { 
    type: Schema.Types.ObjectId, 
    ref: "Address" 
    } 
}); 

Ни один из них будет работать.

Создать документ не бросать ошибки, но subdoc не сохраняется

var a = new Address({ phone: 000 }); 

var o = new Order({ address: a }).save(); 

Это дает Cast для ObjectId Ошибка Ошибка:

var o = new Order({ address: { phone: 000 } }).save(); 

Единственный способ это похоже на работу является Спасая которые я бы хотел избежать, поскольку у меня есть несколько адресов, так что это немного грязно.

Странно, что я никогда не сталкивался с этой проблемой - какие-либо идеи?

ответ

0

Адресный объект в вашей основной схеме должен иметь тип Schema.Types.Mixed. Вы указываете, что адрес должен быть ObjectId, поэтому вы получаете эту ошибку Cast to ObjectId.

См. http://mongoosejs.com/docs/schematypes.html.

Пример:

var Order = new Schema({ 
    code: { 
    type: String 
    }, 
    address: { 
    type: Schema.Types.Mixed, 
    ref: "Address" 
    } 
}); 
+0

Это становится subdoc и не вложенная исх/схема с проверкой , – cyberwombat

0

ОК. Если вам нужно только поля с подполеем никакой другой схемы нужно, вы можете идти по этому пути:

var Order = new Schema({ 
    code: { 
    type: String 
    }, 
    address: { 
    phone: String, 
    name: String, 
    street: { type: String, required: true } 
    } 
}); 
0

Чтобы сделать это сохранить адресную схему все, что вам нужно сделать в функции, которая будет сохранять порядок это: var Адрес = mongoose.model ('Адрес'); var Order = mongoose.model ('Заказ');

export.createAddress = function(req, res) { 
    var address = new Address({phone: 000}); 
    address.save(callback function); 
}; 

для схемы заказа все, что вам нужно сделать, это:

export.createOrder = function(req, res){ 
    var order = new Order(req.body); 
    order.address = req.address; 
    order.save(callback function); 
}; 

Обратите внимание, что это пример использования узла, выразить

Смежные вопросы