【问题标题】:Node Mongoose, Cast to ObjectId failed for value "N" at path "PATH"节点 Mongoose,转换为 ObjectId 失败,路径“PATH”中的值“N”
【发布时间】:2014-04-21 03:25:37
【问题描述】:

尝试为 Node Express 应用程序设置 mongoose 数据库,我的一些文档包含需要引用其他集合的记录。

我知道 Mongoose 提供了 populate 方法来填充这些关系,但我在设置它时遇到了困难。据我所知,我需要这样指定我的架构......

bookingSchema = mongoose.Schema
  _id:        Number
  # Involved users
  __booker:     {type: Schema.Types.ObjectId, ref: 'User'}

...但是当我尝试使用 __booker 值(例如 1、2、3(所有这些都是 User 集合中的有效文档)为数据库播种)时,出现错误...

Cast to ObjectId failed for value "3" at path "__booker"

我会假设整数或整数字符串应该很容易被强制转换为 ObjectId,但似乎无法使其正常工作。我做错了什么?

【问题讨论】:

    标签: database node.js express mongoose


    【解决方案1】:

    我写了这个问题,因为上述情况让我呆了好几个小时。巨大的刺激,结果证明解决方案非常简单,并且在猫鼬文档中,就像一个单一的班轮一样。无法想象我是唯一遇到这种情况的人,因此发布了答案。

    看起来 mongoose 不喜欢将你的类型转换为 _ids。如果人们正在创建具有指定彼此关系的种子值的数据库,他们可能会遇到这个问题。我试图使用 Number 类型作为对其他模型的参考,因为我相信 mongoose 会将其转换为正确的 id 类型。不会的。

    如果用户看起来像这样......

    userSchema = mongoose.Schema
      _id:        Number
      fname:      String
    

    ...你的帖子看起来像这样...

    postSchema = mongoose.Schema
      _id:    Number
      __user:  {type: Number, ref: 'User'}
    

    那么你需要把它作为你的 UserSchema。

    bookingSchema = mongoose.Schema
      _id:        Number
      # Involved users
      __booker:     {type: Number, ref: 'User'}
    

    注意类型是Number,而不是ObjectId。这将允许填充函数在您的模型实例上正确运行。

    希望这有帮助,我要去撞墙了!

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2014-03-14
      • 2020-07-28
      • 2013-03-24
      • 2015-07-16
      相关资源
      最近更新 更多