2015-03-11 6 views
10

Похоже, определение моей схемы таким образом:Должен ли я использовать 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

Но я запутался, что обе работы.

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

ответ

7

Это не имеет значения. Оба точно такие же. Если вы на самом деле 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' } 
} 
3

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

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