database - Node Mongoose,转换为 ObjectId 失败,路径 "N"处的值 "PATH"

标签 database node.js express mongoose

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

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

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

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

路径“__booker”处的值“3”转换为 ObjectId 失败

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

最佳答案

我写了这个问题,因为上述情况让我愣了几个小时。巨大的刺激,事实证明解决方案非常简单,在 Mongoose 文档中,就像一个衬垫一样。无法想象我是唯一遇到这种情况的人,因此发布了答案。

看来 Mongoose 不会乐意将你的类型转换为 _ids。如果人们创建的数据库具有指定彼此关系的种子值,则他们可能会遇到此问题。我试图使用 Number 类型作为对其他模型的引用,因为我相信 mongoose 会将其转换为 ids 的正确类型。不会的。

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

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。这将使填充函数能够在您的模型实例上正确运行。

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

关于database - Node Mongoose,转换为 ObjectId 失败,路径 "N"处的值 "PATH",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22428692/

相关文章:

数据库查找/字典表 - 设计问题 - 硬编码 GUID

mysql - 如何更新 mysql 文件中指定的用户?

database - 甲骨文数据库 : delete all the contents

node.js - 在 Elastic Beanstalk AWS 中为 NodeJs 应用程序提供静态文件

node.js - 在 express 中获取 rawBody

database - 无法在 Mac OS X 上启动 Homebrew PostgreSQL 安装 - "Permission Denied"

node.js - child.stdout.on 适用于 read 但不适用 read -p

node.js - 如何从 Express 路由映射中自动生成 API 文档?

node.js - 防止 Mongoose 堆栈跟踪错误

javascript - 使用 EJS 将数据从 Node js 传递到 HTML