我正在尝试将模型中名为grade
的架构属性引用到另一个模型的id
。但是有一些例子我希望将其保留为null
。我尝试将默认设置保留为null
并尝试但是我收到以下错误:
ValidationError: User validation failed: grade: Cast to Array failed for value "" at path "grade"
以下是我的代码:
import * as mongoose from 'mongoose';
const userSchema = new mongoose.Schema({
username: String,
email: { type: String, unique: true, lowercase: true, trim: true },
password: String,
school: { type: String, default: null },
mobile: Number,
grade: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Grade', default: null }],
role: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Role' }],
company: { type: String, default: null },
designation: { type: String, default: null },
active: { type: Number, default: 2 },
url: { type: String, default: null },
admin: { type: Number, default: 0},
created: { type: Date, default: Date.now },
last_active: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);
export default User;
有没有办法可以将默认值保持为null
但引用它?
答案 0 :(得分:1)
在MongoDB或NoSQL数据库中,不需要将默认值设置为NULL,因为它基于Schemaless架构,但是在关系数据库中,您可以这样做。只要您没有该字段的值,此列就不应该存在于该行中。
在下面的示例中检查您的架构的两行:
{username: "jack", email: "jack@gmail.com", password: "123"}
{username: "msoliman", email: "msoliman@gmail.com", password: "123", school: "AB"}
您注意到第一行根本没有学校,这与您在关系数据库学校中保存为NULL完全相同。
我希望这可以帮助您理解我的意思,如果不是,请发表评论。如果它有帮助请不要忘记评价我的答案
答案 1 :(得分:0)
NoSQL以这种方式定义,如果值可用,那么它将存储在模式中,否则它将不会考虑它。因此,如果您要定义可能具有或未具有值的键,请将其作为您在上述架构中扮演的角色,否则您可以将其视为
默认:'',
school: { type: String, default: '' }