【问题标题】:Mongoose ObjectId : Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex charactersMongoose ObjectId:错误:传入的参数必须是 12 个字节的单个字符串或 24 个十六进制字符的字符串
【发布时间】:2016-12-21 23:40:46
【问题描述】:

我在创建自己的 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);

我产生了错误:

错误:传入的参数必须是 12 个字节的单个字符串或 24个十六进制字符的字符串

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

【问题讨论】:

    标签: mongoose mongoose-schema


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多