Should I Use Schema.Types.ObjectId or Schema.ObjectId When Defining a Mongoose Schema

前端 未结 4 740
温柔的废话
温柔的废话 2021-02-12 23:39

It seems like defining my Schema this way:

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


        
相关标签:
4条回答
  • 2021-02-12 23:59

    The documentation says: "To specify a type of ObjectId, use Schema.Types.ObjectId in your declaration."... "or just Schema.ObjectId for backwards compatibility with v2".

    So I use "Schema.Types.ObjectId".

    0 讨论(0)
  • 2021-02-13 00:13

    I know this is an old topic but I ran into some trouble in this area recently, so here's what I found in case anyone else's banging their heads against the wall:

    Whenever you use a reference in your schema to an ObjectId, you MUST use mongoose.Schema.Types.ObjectId.

    mongoose.Types.ObjectId should be used solely for its constructor when building new objectIds from a string hex or, as it's probably the most common use case, to validate a string as an ObjectId hex, say:

    try {
      let oid = new mongoose.Types.ObjectId('XXXXXXXXX')
    } catch (e) {
      console.error('not a valid ObjectId hex string ==> ', e)
    }
    
    0 讨论(0)
  • 2021-02-13 00:16

    There isn't much of a difference, but they are available for separate uses.

    Schemas should always use mongoose.Schema.Types.

    mongoose.Types are the object you work with within a mongoose document. These are special array subclasses, buffer subclasses, etc that we've hooked into or created special to ease updates and track changes.

    Source: https://github.com/Automattic/mongoose/issues/1671

    0 讨论(0)
  • 2021-02-13 00:19

    It doesn't matter. Both is exactly the same. If you actually console.log(mongoose.Schema); you can see that both mongoose.Schema.ObjectId and mongoose.Schema.Types.ObjectId refer to the exact same thing.

    { [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' } 
    }
    
    0 讨论(0)
提交回复
热议问题