Mongoose Schema参考值,默认为null

时间:2017-12-16 04:23:41

标签: node.js mongoose

我正在尝试将模型中名为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但引用它?

2 个答案:

答案 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: '' }