当前位置: 首页 > 知识库问答 >
问题:

使用req.query查找所有对象,如string

姜鸿畴
2023-03-14

我有以下代码用于在对Mongoose数据库的API调用中获取路由,我想使用一个查询字符串来查找包含各种单词的所有项,示例路径是:

/CPU=I3&Username=Bob

这将导致所有CPU中包含i3的用户都使用包含bob的名称(一个奇怪的例子!)。

CPU可以是任何一代的,并且实际上包含以下内容:

Intel(R)Core(TM)i3-8109U CPU@3.00 GHz或Intel(R)Core(TM)i3-3220 CPU@3.30 GHz

名字可以是鲍勃史密斯,鲍勃琼斯,鲍勃你明白了!

我可以这样使用regex:

const foundAsset = await Asset.find({'cpu': {'$regex': '.*i3.*'}});

我的问题是,显然我无法在其中硬编码cpu或i3,因为它可能是任何东西,例如它可能只是搜索username=bob而不是cpu=i3,我读取的查询字符串如下所示:

 .get(async (req, res) => {
  let options = {
    ...req.query
  };

然后这样返回:

 const foundAsset = await Asset.find(options);

    res.json({
      status: 'success',
      data: foundAsset
    });
  } catch (e) {
    console.log(e);
  }

显然,在regex中使用Options代替i3是有意义的,但显然不起作用,因为Options有{CPU:'i3'},我当然可以使用Options.CPU这样的东西,它只返回CPU,但如果有人想搜索像bob这样的用户名,我该怎么办。

我确实知道每个查询字符串可能是什么,所以可以循环遍历每个查询字符串?

谢谢

共有1个答案

沈开畅
2023-03-14

对于opitons对象,您的想法没有错,您只需要转换查询数据以使用mongo regex运算符。
因此您的代码如下所示:

cosnt options= Object.keys(req.query).reduce(
  (accumulator, key) => {
     accumulator[key] = {'$regex': `.*${req.query[key]}.*`}
     return accumulator;
  },{})
const foundAsset = await Asset.find(options);
 类似资料:
  • 问题内容: 在python中找到对对象的所有引用的好方法是什么? 我问的原因是看起来我们有“内存泄漏”。我们正在将图像文件从Web浏览器上传到服务器。每次执行此操作时,服务器上的内存使用量都会与刚刚上传的文件的大小成比例地增加。python垃圾回收永远不会释放该内存,因此我认为即使在每次请求结束时,也可能存在指向图像数据的流浪引用,这些引用并没有被删除或超出范围。 我认为能够问python很好:“

  • 问题内容: 是否有可能在Java中获得对对象的所有引用。 我需要检查的是对象是否删除了所有的回调订阅。 谢谢 问题答案: 这可以通过JVMTI实现,并且通常由堆分析器完成。但是,它不能在Java内部完成。

  • 用命令findobj可以通过搜索带特定属性值的对象得到图形对象的句柄。用findobj,可以指定任何属性组合的值,这样要从多个对象选出一个就变的容易。例如,可能需要找出带有正方标记蓝色外观的蓝线。 也可以指定搜索哪个图形或轴。以下各节提供示例阐述如何用findobj命令。 查找所有某类型的对象 由于所有对象都具有一个用来辨别类型的类型属性,你可以查找所有某特定类型对象事件的句柄。例如, h = f

  • 问题内容: 我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,喜爱的猫食等等。 Java集中存储了一堆猫,我需要查找所有3岁的猫,或者最喜欢猫粮的Whiskas。当然,我可以编写一个自定义方法来查找那些具有特定属性的Cat,但是这样做会麻烦许多属性。有一些通用的方法吗? 问题答案: 您可以编写一个采用接口实例的方法,该实例定义了一个方法,该方法可以通过所需的任何属性检查来实现。 更好的是,使其

  • 问题内容: 当我在.java文件中时,未使用的代码通常显示为灰色或带有绿色下划线,表示该代码可能(可能由于某些奇怪的JNI / Reflection极端情况)未使用。但是我有一个包含成千上万个Java文件的项目,我想找到所有此类可能未使用的代码的实例。如何在IntelliJ IDEA中做到这一点? 问题答案: 只需在启用适当检查的情况下 使用即可 ( “声明冗余” 组下的 “ 未使用的声明 ” )

  • 问题内容: 我有一个类的变量。我希望调用以返回相应的元素以及this的所有父元素。我该怎么做呢? 问题答案: 如果我正确理解了您的问题,则需要先找到元素,然后再找到父元素,直到找到根为止。 您可以使用XPath来获取父元素,直到到达页面根目录为止。所以像这样: (可选)您可以在元素上停下来,而不是一个。 还要注意,这是相当慢的,特别是如果其嵌套的元素很深。更快的替代方法是使用运行使用相同逻辑的ja