【问题标题】:How to filter and select specific fields from mongodb in a GET request?如何在 GET 请求中从 mongodb 中过滤和选择特定字段?
【发布时间】:2021-03-26 18:09:09
【问题描述】:

我刚刚开始使用 mongoose/mongodb 和 node.js 来构建我正在开发的 react native 应用程序的后端。我对从节点查询数据库中的文档感到相当满意,但是如何在前端的 GET 请求(使用 fetch)中设置这些“过滤器”?

如果用户将过滤器应用于列表以仅返回特定价格的产品,我如何将该过滤器从客户端获取到服务器端,以便节点可以对数据库进行正确的查询?

如果我只想返回特定字段而不是返回 mongodb 文档中的每个字段,则同样的问题。如何让后端知道从客户端返回哪些字段?

希望这一切都有意义,就像我说的我对 mongo 和 node 都很陌生,所以如果我的解释不是最好的,我深表歉意。

感谢任何可以提供帮助的人!

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    您正在寻找的是一种查询语言 - 一种用于将查询参数传送到服务器的语法。有几种选择。

    一些网站决定只支持简单的查询。在这种情况下,最简单的查询语言是 GET 查询字符串。例如,如果您正在建立一个在线商店,您的客户通常需要按名称和类别搜索产品,因此您最终可能会得到两个您支持的 查询字符串参数在 URL 中,如下所示:
    /products?category=clothes&search=t-shirt

    然后,您的应用程序必须独立处理每个参数 - 您的后端必须知道如何将其转换为 MongoDB 查询。例如:

    products.find({
      category: { $eq: req.query.category },
      $text: { $search: req.query.search }
      // similarly, you could accept params such as "pricemin" and "pricemax"
      //  and construct a { $gt, $lt } query
    });
    

    对于需要更大灵活性的更复杂的系统或应用程序,您可以允许客户端自行构建完整的查询并将其传递给后端进行评估。存在多种解决方案可以让您实现这一目标 - GraphQL 最近是一个流行的选择,因为它具有良好的工具支持和易用性。另一个广为人知的解决方案是 OData,它用于一些备受瞩目的 API,例如 Microsoft Graph API

    如果使用高级查询语言,您的后端将始终需要在发送到服务器的格式和数据库使用的格式之间进行转换。最简单的非通用示例是上面的代码 sn-p - 尽管包含电池的解决方案通常会附带自己的翻译器,因此如果存在为您执行此操作的包,您可能不需要自己编写任何代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 2018-08-09
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多