我有一个在nodejs中使用mongoose的测试模式,比如

testschema = mongoose.Schema({
         name:{
    type:String,
    required:true,
    unique:true
  },
  image:{
    type:String,
    required:true
  },
  category:{
    type:String
  },
});

如果不是由用户提供,我如何将"类别"字段设置为可选字段并将其默认为空?

我试过了

 category:{
        type:String,
        optional: ''
      },

但是当打印出与方案一起保存的文档时,它甚至不显示字段类别.

推荐答案

这里最可能需要的是设置default的值.

category: {
    type: String,
    default: ''
}

这使得该字段在某种程度上是可选的,因为如果不设置它,它默认为''

此外,可以传递function以生成默认值:

date: {
    type: Date,
    default: Date.now
}

请注意,我们在这里传递的是Date.now(不是Date.now()),这是一个返回当前时间戳的函数.

default: () => Date.now()

在更新时设置默认值

user whoami所述,mongoose 只设置默认值on insert.

如果你使用mongoose 4.x and upMongoDB 2.4.0 and up,你可以 Select setting default values on update too.

设置upsert标志时,所有updatefindOneAndUpdate查询也应用默认值.

Mongoose docs: The setDefaultsOnInsert option

Mongodb相关问答推荐

如何联接Mongoose中的集合并检索特定字段

MongoDB 投影按数组中的字符串长度排序

如何在 MongoDB 中的集合下查找同一文档

Kotlin 使用初级构造实例化公开类

将数据从一个集合插入另一个集合的聚合

在 Mongo 聚合中,可以通过分组生成 3 个不同的计数

mongoDB 过滤、排序和排名结果

如何过滤查找mongodb的结果

MongoDB 存储大量指标/分析数据的方法

mongo.lock 文件有什么用?

替换 MongoDB 中数组中的嵌入文档

MongoDB - 如果新值更大,则更新字段

带有 mongodb 和 nodejs 的实时 Web 应用程序

MongoDB 的 BinData(0, "e8MEnzZoFyMmD7WSHdNrFJyEk8M=") 中的0是什么意思?

Mongoose 与 mongodb 如何返回刚刚保存的对象?

如何在 MongoDB 中进行内部连接?

MongoDB $或PHP中的查询

嵌套数组内的Mongodb增量值

使用 MongoDB 进行嵌套分组

在 MongoDB 中比较日期(moment.js)