Tôi có sơ đồ sau đây:Tài liệu tham khảo với ObjectId khi lưu trong mongoose
// ingredient
var ingredSchema = new Schema({
name: String,
cost: Number
});
// order
var orderSchema = new Schema({
cusName: String,
ingredients: [{type: Schema.Types.ObjectId, ref: 'Ingredient'}]
});
// create model
var Ingredient = mongoose.model('Ingredient', ingredSchema);
var Order = mongoose.model('Order', orderSchema);
tôi đã lưu một thành phần bó trong một bộ sưu tập ingredients
và có một giao diện người dùng mà người sử dụng chọn một tập hợp các thành phần cho bánh mì kẹp thịt của họ. sau đó tôi cố gắng tiết kiệm một trật tự cho một burger trong một bộ sưu tập orders
trong cùng một cơ sở dữ liệu burgers
như thế này:
// get order info from the form
var newOrder = new Order({ cusName: req.body.name,
ingredients: req.body.ingredients });
newOrder.save(function(err) {
if (err)
return console.log('Could not save your new order', err);
res.redirect('/order');
});
Cuộc gọi để lưu một trật tự tạo ra các lỗi sau:
{ message: Cast to ObjectId failed for value xxx at path 'ingredients',
name: 'CastError',
type: ObjectId,
value: xxx,
path: 'ingredients' }
tôi sử dụng mongoose phiên bản 3.6.11. Xin hãy giúp tôi hack cái này.
PS: req.body.ingredients là một mảng được tạo từ hộp kiểm.
Tôi chạy tùy chọn 1 và bày tỏ ném một lỗi: 'Lỗi: Đối số được thông qua năm phải là một chuỗi duy nhất của 12 byte hoặc một chuỗi 24 ký tự hex'. Tôi vẫn đang cố gắng quấn quanh cái thứ 'ObjectId' của mình. – gabeno
Vâng, hãy kiểm tra tùy chọn 2 ngay bây giờ. Bạn có thể không đi qua 'ObjectId' hợp lệ. – gustavohenke
Bạn đã hiểu! Lựa chọn hai móng nó. Vấn đề là tôi có 'ingred.name' được điền trong' req.body.ingredients' thay vì 'ingred._id'. Cảm ơn cho những người đứng đầu lên. – gabeno