看起来像是这样定义我的模式:
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"}
});这两种方法都有效。我看到mongoose指南用的是Schema.Types.ObjectId
http://mongoosejs.com/docs/schematypes.html
但我感到困惑的是,两者都能正常工作。
模式应该使用哪种模式?这两者有什么不同呢?
发布于 2015-11-12 17:50:20
无所谓。两者是完全相同的。如果你实际使用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' }
}发布于 2017-01-25 00:26:08
documentation说:“要指定ObjectId的类型,请在声明中使用Schema.Types.ObjectId。”...“或者只是为了向后兼容v2而使用Schema.ObjectId”。
所以我用了"Schema.Types.ObjectId“。
发布于 2018-09-29 04:15:06
我知道这是一个古老的话题,但最近我在这个领域遇到了一些麻烦,所以这是我发现的,以防其他人的头撞到墙上:
每当在架构中使用对ObjectId的引用时,都必须使用mongoose.Schema.Types.ObjectId。
当从字符串十六进制构建新的objectIds时,mongoose.Types.ObjectId应该仅用于其构造函数,或者,因为它可能是最常见的用例,所以要将字符串验证为ObjectId十六进制,例如:
try {
let oid = new mongoose.Types.ObjectId('XXXXXXXXX')
} catch (e) {
console.error('not a valid ObjectId hex string ==> ', e)
}https://stackoverflow.com/questions/28997636
复制相似问题