它在文档中提到了以下内容:
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部分
3条答案
按热度按时间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并执行以下操作:
字符串
您的架构
_id
是通过mongoose.Types
创建的,并且是mongoose.ObjectId
的示例。也不是该类型的示例,如文档“A SchemaType is different from a type”中所述。生成的
_id
是ObjectID
的示例,但不是生成值的“父”的示例。vdgimpew2#
所以换句话说,我们开发人员只使用mongoose.Types.ObjectId,而mongoose.ObjectId在大多数情况下只被mongoose使用,而不是被我们使用。如果我误解了,请纠正我,你曾经使用过mongoose.ObjectId吗?如果是,在哪些场景中?- Ekmek
Ekmek -我对此有一些经验。mongoose对象ID以这种方式的原因是“预取”一个唯一的ID。而不是等待mongodb接受新的文档并发出ID,我们可以使用mongoose为我们创建一个密钥,并保存等待步骤。当你想要新的id但没有时间等待mongodb给予你一个时,这很有用。.我只是不记得了如果我必须配置一些东西来告诉mongodb不要担心。
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,它只是模式中路径的配置。