【问题标题】:Using a variable inside mongoose find() Query在 mongoose find() 查询中使用变量
【发布时间】:2020-07-04 16:43:26
【问题描述】:

我正在尝试与 mongoose 合作实现一个我计划稍后扩展的简单搜索功能。

基本上,我要做的是从用户那里获取搜索查询并将其放入 mongoose find() 查询中,但根据他们的文档,我使用的是内置的“正则表达式”方式:

    MyModel.find({ name: /john/i }, null, { skip: 10 })

这里,john 是一个静态值,当我尝试放置一个变量时它不起作用。

    MyModel.find({ name: /req.query.name/i }, null, { skip: 10 })

如何放置变量而不是静态内容?

P.S:我尝试使用 JS 正则表达式,它确实有效,但我想用猫鼬的方式来做。

    MyModel.find({ name: new RegExp(req.query.name, "i") }, null, { skip: 10 }) //this works

【问题讨论】:

  • 我不认为在 Mongoose 使用的正则表达式中使用变量与通常在正则表达式中使用变量有任何不同。有关的? stackoverflow.com/questions/494035/…
  • @FelDev 好吧,它们是一样的

标签: node.js mongodb mongoose


【解决方案1】:

你可以使用 $regex of mongoose

MyModel.find({ name: {$regex: req.query.name, $options:'i'} }, null, { skip: 10 }) 

【讨论】:

    【解决方案2】:

    为了从字符串创建动态正则表达式,唯一的选择是像您一样使用new RegExp。使用文字 /../-method(请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)是无法实现的。

    但是,在任何一种情况下,结果都将是一个正则表达式对象——它具有相同的方法和属性。 Mongoose 实际上并不关心您创建正则表达式的方式。

    正如 Ibrahim 的回答所建议的那样,您可以让 mongoose/mongodb 来代替在 javascript 中创建正则表达式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 2017-12-18
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2018-12-22
      相关资源
      最近更新 更多