节点猫鼬,在路径 "PATH" 处对值"N"的强制转换为对象 ID 失败



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

我知道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,但似乎无法使其工作。我做错了什么?

我写这个问题是因为上面的情况让我呆了几个小时。大量的刺激,结果证明解决方案很简单,在猫鼬文档中,就像一个单一的眼线。无法想象我是唯一一个遇到这种情况的人,因此发布了答案。

看起来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。这将允许填充函数在您的模型实例上正确地操作。

希望这对你有帮助,我要去碰壁了!

最新更新