Mongoose ObjectId : Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

Mongoose ObjectId : Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

我在创建自己的 ObjectId 时遇到困难。我有两个型号:

const TableSchema = new mongoose.Schema ({ 
  .... 
  chairs: [{type: mongoose.Schema.Types.ObjectId, ref: 'ChairModel}] 
  .... 
}) ;


const ChairSchema = new mongoose.Schema ({ 
 .... 
 table: {type: mongoose.Schema.Types.ObjectId, ref: 'TableModel} 
 .... 
 }) ;

当 ObjectId 由 mongoose 生成时,这种模式对我一直有效。

但是当我生成一个 randomAlphaNum 字符串时:

let randomNum = makeRandom(24); //  1etdk0c86762e0fb12dptsli
let TableId = mongoose.Types.ObjectId(randomNum);

我产生错误:

Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

如何从简单的 alphaNumeric 脚本生成器创建有效的 mongoose ObjectId?

ObjectId 必须由有效的十六进制值组成(您有 p、t 和 s)。一种选择(我不知道你使用哪个库来实现 makeRandom)是将 makeRandom 的字符集限制为 0-9 a-f。 否则,如果它们是随机的,您可以让 mongoose 为您生成 ID:

let tableId = mongoose.Types.Objec‌​tId()