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_namerole_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)

浏览器地理位置 API 不抛出错误或遵守超时

node.js + express.js:使用 mongodb/mongoose 处理会话

Express.js - Mongoose 多个或条件