【问题标题】:AND operator in mongodb regexMongoDB 正则表达式中的 AND 运算符
【发布时间】:2020-05-07 12:17:04
【问题描述】:

在一个带有名为interests 的数组字段的mongo 数据库中, 当我需要寻找对柔道或 mma 感兴趣的人时,我会这样写查询:

{interests : {$regex: "judo|mma", $options: 'i'}}

我如何找到对柔道和 mma 感兴趣的人?

注意: 我已经尝试了以下各种变体,但似乎都没有效果:

{interests : {$regex: "(?=judo)(?=mma)", $options: 'i'}},
{interests : {$regex: "(?=.*judo)(?=.*mma)", $options: 'i'}}

谢谢。

【问题讨论】:

  • 目前,您正在尝试检查一个字符串是否同时是“judo”和“mma”。这当然永远不会发生。您能否举例说明在这种情况下您的数据是如何结构化的?
  • (?=.*judo)(?=.*mma) 应该可以工作。
  • @Pac0 确定! inrerests 是这个结构的数组:```interests : { type: Array, default: [] } ```
  • 你能试试类似的东西吗:{interests: {$all: [/^judo/, /^mma/], , $options: 'i'}}
  • @WiktorStribiżew 它是一个数组,可能包含“柔道”、“mma”或“其他”等元素,或者它们都不包含。它不是一个逗号分隔的字符串,您可以在其中执行一次搜索。就像在“柔道,其他,MMA”中一样

标签: node.js regex mongodb mongodb-query regex-lookarounds


【解决方案1】:

这样的事情应该可以工作:

{interests: {$all: [/^judo$/i, /^mma$/i]}

【讨论】:

  • 如果数组被直接发送到函数,是否有做这种不区分大小写的搜索?例如。数组:["judo","mma"]
  • 您可以使用mapnew RegExp 将数组的每个字符串动态映射到一个正则表达式:["judo","mma"].map(x => new RegExp(x, "i"))(我会让您添加锚点^$字符串x,如果你愿意)。输出将是一个正则表达式数组,所以它应该可以工作(未经测试,我附近没有 mongodb)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
相关资源
最近更新 更多