Express API REST 过滤数据 MongoDB

Posted

技术标签:

【中文标题】Express API REST 过滤数据 MongoDB【英文标题】:Express API REST Filter Data MongoDB 【发布时间】:2019-01-14 17:53:38 【问题描述】:

我有一个带有 express 和 mongo 的 Pokemon API REST。我试图按他的类型过滤口袋妖怪。

我从 Angular 发送了一个 http GET,其中包含要过滤参数的类型。

有以下controller.js

const pokemons = require('../models/pokemon');
const laboratoryCtrl = ;

laboratoryCtrl.filterPokemon = async (req, res) => 
  const filterType = req.query.type; // filterType = "Fire"
  const pokemon = await pokemons.find( $or : [type: /^Fire/, type2: /^Fire/] )
   .sort( pokedex: + 1 );
      res.json(pokemon);
   

module.exports = laboratoryCtrl;

如何在 .find() 方法中使用实际上是 Fire 的“filterType”值?

这是过滤数据的好方法吗?这是我的第一个 API REST 和我的第一个 express + mongo 项目

【问题讨论】:

【参考方案1】:

使用 RegExp 构造函数创建带有 filterType 变量的正则表达式实例:

const rgx = new RegExp(`^$req.query.type`); //or new RegExp('^'+req.query.type)
const pokemon = await pokemons.find( 
    '$or': [
         'type' : rgx , 
         'type2': rgx 
    ] 
).sort( pokedex: + 1 );
res.json(pokemon);

【讨论】:

嘿@chridam 你能再帮我一次吗?我怎么能做同样的事情,但这次使用 sort() 方法和 pokedex 属性,我总是得到 /pokedex/,我只需要“pokedex” nvm 我找到了解决方案,我分享了,所以也许其他人可以使用它const filterStat = new Object();filterStat[req.query.type] = + 1; 嘿又是我!如果我不选择要过滤的类型,如何使用 Regexp 在 SQL 上设置等效的 *? /^*/ /^''/ /^%/ 不工作 你将不得不用强烈反对来逃避它,例如new RegExp("^\\*") 有了你的信息,我可以更好地搜索并找到解决方案/.*?/

以上是关于Express API REST 过滤数据 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

使用我的 node/express rest api 服务器获取数据时 CORS 被阻止

使用 JWT 和路由的 Express REST API

如何在 REST API 上直接启用托管元数据字段的过滤器?

如何使用 Advanced REST Client 或 Postman 测试 Express/node REST API 后端?

NodeJS REST API with MySQL and Express

mongose + express 写REST API