【问题标题】:Express Js Mongoose not throwing Invalid Column errorExpress Js Mongoose 不抛出 Invalid Column 错误
【发布时间】: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。

【问题讨论】:

    标签: node.js mongodb express mongoose graphql


    【解决方案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 并运行查询以查看结果以检查此想法。
    猜你喜欢
    • 2020-07-30
    • 2018-01-14
    • 2013-06-23
    • 2021-04-15
    • 2020-06-17
    • 2022-07-27
    • 2017-05-16
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多