【问题标题】:Defining Mongoose model schema type as ObjectId with exception将 Mongoose 模型模式类型定义为 ObjectId,但有异常
【发布时间】:2020-05-24 07:42:31
【问题描述】:

我有以下任务架构:

const taskSchema = new mongoose.Schema({
  description: {
    type: String,
    required: true,
    trim: true
  },
  folder: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Folder'
  },
  ...
}

用户在客户端创建任务时,可以选择该任务所属的文件夹。文件夹也使用自己的架构创建。但是,当检索用户的文件夹时,在客户端我注入另一个名为“所有任务”的默认文件夹,它的 ID 为 0。因此,如果用户没有选择文件夹(没关系),则 0 正在作为 ID 传递。这就是我遇到错误的地方,因为 Mongoose 无法将 0 转换为 ObjectId。

“任务验证失败:文件夹:对于路径 \"folder\"" 处的值 \"0\",转换为 ObjectID 失败

除了将文件夹类型定义为String或Schema.Types.Mixed,还有其他可能的解决方案吗?

【问题讨论】:

    标签: mongoose mongoose-schema objectid


    【解决方案1】:

    所以我最终在服务器端更改了返回的文件夹列表,而不是在客户端进行。

    await req.user.populate({
        path: 'folders',
        match: {},
        options: {
          sort: {
            name: 1
          },
          collation: {
            locale: 'en'
          }
        }
      }).execPopulate()
      req.user.folders.unshift({
        _id: new mongoose.Types.ObjectId(),
        name: 'All tasks',
        owner: req.user._id
      })
      res.send(req.user.folders)
    

    当然,它需要对客户端代码进行一些更改,但现在一切似乎都按预期工作了。

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 1970-01-01
      • 2017-12-30
      • 2014-05-21
      • 2016-10-31
      • 2014-08-20
      • 2019-03-18
      相关资源
      最近更新 更多