首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义Mongoose Schema时,我应该使用Schema.Types.ObjectId还是Schema.ObjectId

定义Mongoose Schema时,我应该使用Schema.Types.ObjectId还是Schema.ObjectId
EN

Stack Overflow用户
提问于 2015-03-12 05:23:44
回答 4查看 8.6K关注 0票数 21

看起来像是这样定义我的模式:

代码语言:javascript
复制
var PossessionSchema = new mongoose.Schema({
  thing: {type: mongoose.Schema.Types.ObjectId, ref:"Thing"}
});

或者这样:

代码语言:javascript
复制
var PossessionSchema = new mongoose.Schema({
  thing: {type: mongoose.Schema.ObjectId, ref:"Thing"}
});

这两种方法都有效。我看到mongoose指南用的是Schema.Types.ObjectId

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

但我感到困惑的是,两者都能正常工作。

模式应该使用哪种模式?这两者有什么不同呢?

EN

回答 4

Stack Overflow用户

发布于 2015-11-12 17:50:20

无所谓。两者是完全相同的。如果你实际使用console.log(mongoose.Schema);,你可以看到mongoose.Schema.ObjectIdmongoose.Schema.Types.ObjectId指的是完全相同的东西。

代码语言:javascript
复制
{ [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' } 
}
票数 13
EN

Stack Overflow用户

发布于 2017-01-25 00:26:08

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

所以我用了"Schema.Types.ObjectId“。

票数 8
EN

Stack Overflow用户

发布于 2018-09-29 04:15:06

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

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

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

代码语言:javascript
复制
try {
  let oid = new mongoose.Types.ObjectId('XXXXXXXXX')
} catch (e) {
  console.error('not a valid ObjectId hex string ==> ', e)
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28997636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档