Mongoose:无法在 Mongoose 数组 SchemaType 中添加一项。虽然可以添加不止一个
Posted
技术标签:
【中文标题】Mongoose:无法在 Mongoose 数组 SchemaType 中添加一项。虽然可以添加不止一个【英文标题】:Mongoose: Not able to add one item in Mongoose array SchemaType. Although more than one could be added 【发布时间】:2020-07-18 14:49:04 【问题描述】:下面是我的架构
var makerSchema = new mongoose.Schema(
materials:[
type: String,
required:[true, "Material is a required field"],
trim:true,
lowercase:true,
enum:
values:['wood','metal','plastic','glass','concrete','other'],
message: 'Please choose from the given options only!'
]
,
timestamps:true
)
var Maker = mongoose.model('Maker', makerSchema);
下面是我的路线
router.post('/maker', async (req, res) =>
try
var maker = new Maker(req.body);
await maker.save();
res.status(200).send();
catch (error)
if (error.name === "ValidationError")
let errors = ;
Object.keys(error.errors).forEach((key) =>
errors[key] = error.errors[key].message;
);
return res.status(400).send(errors);
res.status(500).send(error);
)
下面是我的表单,我可以通过按住 Ctrl 并单击选项来选择多个项目。
<form action="/maker" method="POST">
<select multiple class="form-control" id="materials" name="materials">
<option>Wood</option>
<option>Metal</option>
<option>Glass</option>
</select>
<input type="submit" value="Submit">
</form>
但如果我选择单个选项,我会收到以下错误,尽管适用于多个选项:
"materials.0":"Please choose from the given options only!"
如何解决此错误并允许用户不仅选择多个选项,还允许选择单个选项?
【问题讨论】:
【参考方案1】:我的猜测是,当只选择一种材料时,您会得到 maker.materials
的“错误”数据类型,String
。
选择多种材料时,您将在路由器中收到Array<String>
。
所以我会在保存Maker
之前检查路由器中materials
的数据类型。如果还不是,则将其转换为Array
。
【讨论】:
以上是关于Mongoose:无法在 Mongoose 数组 SchemaType 中添加一项。虽然可以添加不止一个的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose - 无法在路径 notification.from 上使用排序填充,因为它是文档数组的子属性