Express Js Mongoose 不抛出 Invalid Column 错误
Posted
技术标签:
【中文标题】Express Js Mongoose 不抛出 Invalid Column 错误【英文标题】:Express Js Mongoose not throwing Invalid Column error 【发布时间】:2021-12-20 16:41:53 【问题描述】:我是 MongoDB 和 Express Js 生态系统的新手。我正在尝试使用 express-graphql
设置 GraphQL 服务器。我有一个名为Role
的非常简单的表,它有两列role_name
和role_description
。该表目前只有两个角色,一个是SUPERADMIN
,另一个是USER
。当我尝试进行以下查询时,我得到了包含有效数据的正确 GraphQL 响应。
Role.findOne(role_name: "SUPERADMIN");
而如果我尝试进行以下查询,我仍然会得到相同的 GraphQL 响应。即返回SUPERADMIN
行。
// There is no column called dummy_column in the roles table
Role.findOne( role_name: "SUPERADMIN", dummy_column: "asd" );
ORM / DB 不应该抛出错误吗?即使它没有抛出错误,对于无效列,如何返回同一行(SUPERADMIN
)?还是我错过了什么?附上我的问题的 gif。
【问题讨论】:
【参考方案1】:MongoDB是一个面向文档的数据库,MongoDB中没有column这样的术语。 MongoDB 将每个条目存储为 BSON(二进制 JSON)文档,它实际上并不关心模式,因此您可以提供任何您想要的内容。所以预计它不会为无效的“列”抛出错误,因为MongoDB中有有效的“列”这样的东西。
验证可能发生在 Mongoose 级别,如果您需要这样的功能,您可以向 Mongoose 团队申请,也许他们有一天会添加。
FWIW,有一种方法可以从 3.2 版本开始强制执行 MongoDB 集合模式。见https://docs.mongodb.com/manual/core/schema-validation/
【讨论】:
感谢您的回答。由于我是 MongoDB 新手,因此我并不完全了解术语。我能理解你的意思。我已经编辑了我的问题。如何返回同一行?它不应该根据过滤器过滤记录吗?从逻辑上讲,SUPERADMIN
行不应该返回对吗?
实际上应该如此,除非 Mongoose 丢弃所有未知字段 :) 直接连接到 MongoDB 并运行查询以查看结果以检查此想法。以上是关于Express Js Mongoose 不抛出 Invalid Column 错误的主要内容,如果未能解决你的问题,请参考以下文章
未捕获从 mongoose-promise 回调函数抛出的错误
Image Magick Module 抛出奇怪的错误(Express js Node js)