【问题标题】:Should I Use Schema.Types.ObjectId or Schema.ObjectId When Defining a Mongoose Schema定义 Mongoose 架构时应该使用 Schema.Types.ObjectId 还是 Schema.ObjectId
【发布时间】:2015-05-13 21:25:51
【问题描述】:

似乎这样定义我的架构:

var PossessionSchema = new mongoose.Schema({
  thing: {type: mongoose.Schema.Types.ObjectId, ref:"Thing"}
});

或者这样:

var PossessionSchema = new mongoose.Schema({
  thing: {type: mongoose.Schema.ObjectId, ref:"Thing"}
});

两者都有效。我看到猫鼬指南使用 Schema.Types.ObjectId

http://mongoosejs.com/docs/schematypes.html

但我很困惑这两者都有效。

架构应该使用哪一个?两者有什么区别?

【问题讨论】:

    标签: mongoose mongoose-schema


    【解决方案1】:

    我知道这是一个老话题,但我最近在这个领域遇到了一些麻烦,所以我发现了以下内容,以防其他人撞墙:

    当您在架构中使用对 ObjectId 的引用时,您必须使用 mongoose.Schema.Types.ObjectId。

    mongoose.Types.ObjectId 在从十六进制字符串构建新的 objectIds 时应仅用于其构造函数,或者,因为它可能是最常见的用例,将字符串验证为十六进制 ObjectId,例如:

    try {
      let oid = new mongoose.Types.ObjectId('XXXXXXXXX')
    } catch (e) {
      console.error('not a valid ObjectId hex string ==> ', e)
    }
    

    【讨论】:

      【解决方案2】:

      没有太大区别,但可以单独使用。

      架构应始终使用mongoose.Schema.Types

      mongoose.Types 是您在猫鼬中使用的对象 文档。这些是特殊的数组子类、缓冲区子类等 我们已经挂钩或创建了特殊的以简化更新和跟踪 变化。

      来源:https://github.com/Automattic/mongoose/issues/1671

      【讨论】:

        【解决方案3】:

        documentation 说:“要指定 ObjectId 的类型,请在声明中使用 Schema.Types.ObjectId。”...“或者只是 Schema.ObjectId 以向后兼容 v2”。

        所以我使用“Schema.Types.ObjectId”。

        【讨论】:

          【解决方案4】:

          没关系。两者完全相同。如果您实际上是console.log(mongoose.Schema);,您可以看到mongoose.Schema.ObjectIdmongoose.Schema.Types.ObjectId 指的是完全相同的东西。

          { [Function: Schema]
            reserved: { 
              _posts: 1,
              _pres: 1,
              validate: 1,
              toObject: 1,
              set: 1,
              schema: 1,
              save: 1,
              modelName: 1,
              get: 1,
              isNew: 1,
              isModified: 1,
              init: 1,
              errors: 1,
              db: 1,
              collection: 1,
              once: 1,
              on: 1,
              emit: 1 
            },
            interpretAsType: [Function],
            Types: { 
              String: { [Function: SchemaString] schemaName: 'String' },
              Number: { [Function: SchemaNumber] schemaName: 'Number' },
              Boolean: { [Function: SchemaBoolean] schemaName: 'Boolean', '$conditionalHandlers': [Object] },
              DocumentArray: { [Function: DocumentArray] schemaName: 'DocumentArray' },
               Embedded: [Function: Embedded],
              Array: { [Function: SchemaArray] schemaName: 'Array' },
              Buffer: { [Function: SchemaBuffer] schemaName: 'Buffer' },
              Date: { [Function: SchemaDate] schemaName: 'Date' },
              ObjectId: { [Function: ObjectId] schemaName: 'ObjectId' },
              Mixed: { [Function: Mixed] schemaName: 'Mixed' },
              Oid: { [Function: ObjectId] schemaName: 'ObjectId' },
              Object: { [Function: Mixed] schemaName: 'Mixed' },
              Bool: { [Function: SchemaBoolean] schemaName: 'Boolean', '$conditionalHandlers': [Object] } 
            },
            ObjectId: { [Function: ObjectId] schemaName: 'ObjectId' } 
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-10-24
            • 2017-01-04
            • 1970-01-01
            • 2010-12-13
            • 2020-03-15
            • 1970-01-01
            • 1970-01-01
            • 2023-03-14
            相关资源
            最近更新 更多