gpt4 book ai didi

node.js - 在 mongoose 中保存时使用 ObjectId 引用文档

转载 作者:IT老高 更新时间:2023-10-28 13:04:07 31 4
gpt4 key购买 nike

我有以下架构:

// 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,用户可以在其中为他们的汉堡选择一组配料。然后,我尝试将汉堡的订单保存在同一数据库 burgers 中的另一个集合 orders 中,如下所示:

// 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 是一个由复选框构建的数组。

最佳答案

您的代码目前可能存在 2 个问题:

1. req.body.ingredients 不会是 ObjectId 的数组,而 mongoose 想要它没问题(我怀疑这个)。

您应该首先将每个成分转换为 ObjectId。假设 req.body.ingredients 是数组,那么你会做这样的事情:

var casted = req.body.ingredients.map(function( ingredient ) {
return mongoose.Types.ObjectId(ingredient);
});

我没有测试这个,看看它是否适合你。

<强>2。 Mongoose 正在尝试转换您的成分,但其​​中之一不是有效的 ObjectId

ObjectId 应该由 24 个十六进制字符组成,检查您是否将这样的值传递给 Mongoose。


如果其中一个对您有用,请发布结果:)

关于node.js - 在 mongoose 中保存时使用 ObjectId 引用文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700563/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com