Должен ли я использовать Schema.Types.ObjectId или Schema.ObjectId при определении схемы Mongoose

Кажется, что я определяю свою схему следующим образом:

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

Но я смущен, что оба работают.

Какой из них следует использовать для схемы? И в чем разница между ними?

Ответ 1

Это не имеет значения. Оба точно такие же. Если вы на самом деле console.log(mongoose.Schema);, вы можете видеть, что как mongoose.Schema.ObjectId, так и mongoose.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' } 
}

Ответ 2

документация говорит: "Чтобы указать тип ObjectId, используйте Schema.Types.ObjectId в вашей декларации."... "или просто Schema.ObjectId для обратной совместимости с v2".

Поэтому я использую "Schema.Types.ObjectId".