mongoose.ObjectId和mongoose.Types.ObjectId有什么区别?

mzaanser  于 12个月前  发布在  Go
关注(0)|答案(3)|浏览(129)

它在文档中提到了以下内容:
ObjectId是一种特殊类型,通常用于唯一标识符。

const carSchema = new mongoose.Schema({ driver: mongoose.ObjectId });

字符串

ObjectId是一个类,ObjectId是对象.等

const Car = mongoose.model('Car', carSchema);

const car = new Car();
car.driver = new mongoose.Types.ObjectId();

typeof car.driver; // 'object'
car.driver instanceof mongoose.Types.ObjectId; // true

car.driver.toString(); // Something like "5e1a0651741b255ddda996c4"


ObjectId是什么意思?是mongoose.ObjectId还是mongoose.Types.ObjectId?
它们之间有什么区别?
文档的URL:
https://mongoosejs.com/docs/schematypes.html#usage-notes
在ObjectIds部分

bihw5rsg

bihw5rsg1#

根据schema types docs
SchemaType不同于类型。换句话说,mongoose.ObjectId!== mongoose. Types. ObjectId。SchemaType只是Mongoose的配置对象。mongoose.ObjectId SchemaType的示例实际上并不创建MongoDB ObjectId,它只是模式中路径的配置。
也是docs:
您可以将Mongoose模式视为Mongoose模型的配置对象。SchemaType则是单个属性的配置对象。SchemaType说明给定路径应该具有什么类型,它是否具有任何getter/setter,以及哪些值对该路径有效。
因此,mongoose.Types.ObjectId是一个“mongoose对象”,而mongoose.ObjectId是一个“mongodb对象”。
编辑以回答评论。
对于第一个问题,对我来说是:是的。作为一个使用mongoose的开发人员,我只使用mongoose函数。这意味着使用mongoose.Types.ObjectId而不是mongoose.ObjectId
另外,如果你尝试执行mongoose.ObjectId(),你会得到一个警告“要创建一个新的ObjectId,请尝试Mongoose.Types.ObjectId而不是使用Mongoose.Schema.ObjectId
关于第二个问题,如果我理解正确的话,也是的。你可以查一下这个。
创建一个新的schema并执行以下操作:

const MongooseModel = new mongoose.Schema({_id: mongoose.Types.ObjectId})

MongooseModel.path('_id') instanceof mongoose.Schema.ObjectId // true
MongooseModel.path('_id') instanceof mongoose.SchemaTypes.ObjectId // true
MongooseModel.path('_id') instanceof mongoose.Schema.Types.ObjectId // true
MongooseModel.path('_id') instanceof mongoose.ObjectId // true
MongooseModel.path('_id').instance // ObjectID

MongooseModel.path('_id') instanceof mongoose.Types.ObjectId // false
mongoose.Schema.ObjectId instanceof mongoose.Types.ObjectId // false

字符串
您的架构_id是通过mongoose.Types创建的,并且是mongoose.ObjectId的示例。也不是该类型的示例,如文档“A SchemaType is different from a type”中所述。
生成的_idObjectID的示例,但不是生成值的“父”的示例。

vdgimpew

vdgimpew2#

所以换句话说,我们开发人员只使用mongoose.Types.ObjectId,而mongoose.ObjectId在大多数情况下只被mongoose使用,而不是被我们使用。如果我误解了,请纠正我,你曾经使用过mongoose.ObjectId吗?如果是,在哪些场景中?- Ekmek
Ekmek -我对此有一些经验。mongoose对象ID以这种方式的原因是“预取”一个唯一的ID。而不是等待mongodb接受新的文档并发出ID,我们可以使用mongoose为我们创建一个密钥,并保存等待步骤。当你想要新的id但没有时间等待mongodb给予你一个时,这很有用。.我只是不记得了如果我必须配置一些东西来告诉mongodb不要担心。

qzlgjiam

qzlgjiam3#

ObjectId是什么意思(引用中的粗体文本)?是mongoose.ObjectId还是mongoose.Types.ObjectId?
它是mongoose.Types.ObjectId,根据文档,这是bson类型。
它们之间有什么区别?
区别在于它们的角色和功能。mongoose.ObjectId是Mongoose ObjectId SchemaType,用作模式中的配置对象。它不直接创建MongoDB ObjectId;而是用于定义Mongoose模式中路径的结构。
另一方面,mongoose.Types.ObjectId是表示BSON ObjectId值本身的类型。
来源:https://mongoosejs.com/docs/schematypes.html
SchemaType不同于类型。换句话说,mongoose.ObjectId!== mongoose. Types. ObjectId。SchemaType只是Mongoose的配置对象。mongoose.ObjectId SchemaType的示例实际上并不创建MongoDB ObjectId,它只是模式中路径的配置。

相关问题