[英]Reference documents with ObjectId when saving in 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);
我已经在一个收集ingredients
保存了一堆成分,并有一个UI,用户可以选择一套汉堡成分。 然后我尝试保存的订单在另一个集合汉堡orders
在同一个数据库中burgers
是这样的:
// 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');
});
保存订单的调用会生成以下错误:
{ message: Cast to ObjectId failed for value xxx at path 'ingredients',
name: 'CastError',
type: ObjectId,
value: xxx,
path: 'ingredients' }
我使用mongoose版本3.6.11。 请帮我解决这个问题。
PS:req.body.ingredients是一个由复选框构建的数组。
您的代码现在有两个可能的问题:
1. req.body.ingredients
将不是ObjectId
的数组,并且req.body.ingredients
希望它没问题(我怀疑这个)。
您应该首先将每个成分转换为ObjectId
。 假设req.body.ingredients
是数组,那么你会做这样的事情:
var casted = req.body.ingredients.map(function( ingredient ) {
return mongoose.Types.ObjectId(ingredient);
});
我没有对此进行测试,看看它是否适合你。
2.猫鼬正试图施放你的成分,但其中一个不是有效的ObjectId
ObjectId
应该由24个十六进制字符组成,检查你是否将这样的值传递给Mongoose。
如果其中一个为你工作,请发布结果:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.