我使用 Mongoose 和 Javascript (NodeJS) 来读取/写入 MongoDB。我有一个文档(父文档),其中有一堆子文档(子文档)。我的文档和子文档都在其模型中定义了验证(required: true
以及验证用户是否将文本放入字段的函数)。
当尝试将新的子文档推送到数据库时,Mongoose 拒绝我的推送,因为文档验证失败。这让我很困惑,因为我并没有尝试使用子文档创建新文档,我只是尝试将新的子文档推送到现有文档中。
这是我的(示例)猫鼬模型:
const mongoose = require('mongoose');
const requiredStringValidator = [
(val) => {
const testVal = val.trim();
return testVal.length > 0;
},
// Custom error text
'Please supply a value for {PATH}',
];
const childrenSchema = new mongoose.Schema({
childId: {
type: mongoose.Schema.Types.ObjectId,
},
firstName: {
type: String,
required: true,
validate: requiredStringValidator,
},
lastName: {
type: String,
required: true,
validate: requiredStringValidator,
},
birthday: {
type: Date,
required: true,
},
});
const parentSchema = new mongoose.Schema(
{
parentId: {
type: mongoose.Schema.Types.ObjectId,
},
firstName: {
type: String,
required: true,
validate: requiredStringValidator,
},
lastName: {
type: String,
required: true,
validate: requiredStringValidator,
},
children: [childrenSchema],
},
{ collection: 'parentsjustdontunderstand' },
);
我可以通过以下 MongoDB 命令成功地将新的子子文档推送到父文档中:
db.parentsjustdontunderstand.update({
firstName: 'Willard'
}, {
$push: {
children: {
"firstName": "Will",
"lastName": "Smith",
"birthday": "9/25/1968" }
}
});
但是,当我按照 Mongoose 文档添加子文档到数组并尝试通过 Mongoose 添加它时,它失败了。
出于测试目的,我使用 Postman 并对端点执行 PUT 请求。以下是req.body
:
{
"firstName": "Will",
"lastName": "Smith",
"birthday": "9/25/1968"
}
我的代码是:
const { Parent } = require('parentsModel');
const parent = new Parent();
parent.children.push(req.body);
parent.save();
我得到的回报是:
ValidationError: Parent validation failed: firstName: Path `firstName` is required...`
它列出了父文档的所有验证要求。
我可以为我做错的事情提供一些帮助。作为记录,我在 Stackoverflow 上查看了这个答案:Push items into mongo array via mongoose,但我看到的大多数示例都没有显示或讨论其 Mongoose 模型中的验证。
湖上湖
holdtom
相关分类