Node.js 将mongoose.Types.ObjectId()与多台缩放机器一起使用(复制问题?)

Node.js 将mongoose.Types.ObjectId()与多台缩放机器一起使用(复制问题?),node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,让我们假设以下代码在运行实时服务器时会执行多次。例如,如果我将机器扩展到有10个实例,那么在保存到mongoDb时ObjectId复制的可能性是否很小?或者,如果存在重复,mongoDb会强迫_id不同吗 //取自mongoose文档! const personSchema=Schema({ _id:Schema.Types.ObjectId, 名称:String, 年龄:数字,, }); const Person=mongoose.model('Person',personSchema); c

让我们假设以下代码在运行实时服务器时会执行多次。例如,如果我将机器扩展到有10个实例,那么在保存到mongoDb时ObjectId复制的可能性是否很小?或者,如果存在重复,mongoDb会强迫_id不同吗

//取自mongoose文档!
const personSchema=Schema({
_id:Schema.Types.ObjectId,
名称:String,
年龄:数字,,
});
const Person=mongoose.model('Person',personSchema);
const author=新作者({
_id:new mongoose.Types.ObjectId(),
名字:“伊恩·弗莱明”,
年龄:50
});
author.save(()=>{
console.log('saved!')
});

基本上,我想要实现的是在保存之前创建一个Id。我不想保存文档,然后收集它们的ID。

将服务器扩展到多个实例不会影响生成的
ObjectID
s的值,因此您现在有了重复的
ObjectID
s。生成的ObjectID的唯一性不仅仅是其生成时间的函数,生成器(本例中为MongoDB节点驱动程序)也会影响唯一的机器和进程属性

如果您想在将文档保存到数据库之前自己创建
\u id
字段,那么您可以轻松地做到这一点,而无需任何麻烦。事实上,您不必使用生成的十六进制字符串,您可以使用字符串或数字,但您必须自己确保唯一性