【问题标题】:Not able to match Pattern Search in Mongo DB无法匹配 Mongodb 中的模式搜索
【发布时间】:2018-05-18 02:53:57
【问题描述】:

如何使用正则表达式匹配 MongoDB 中的给定输入值,因为传递的值大于 DB 中的值。有什么建议吗?谢谢。

DB 中的值 - 123456 输入搜索值 - 1234560000

我尝试了下面的查询,但它没有返回任何结果。

db.getCollection('STUDENT').find(
        {   Studentid:{$regex : '1234560000'}});   

仅供参考-> Studentid 是字符串字段。

【问题讨论】:

标签: java regex spring mongodb mongodb-query


【解决方案1】:

听起来,您必须知道 inputValue 可以是比文档 ID 更多的字符(因为我们正在谈论字符串)。

如果您知道您的输入可能是您想要的 ID,后跟“n”个零(根据您的示例),那么您的正则表达式看起来更像:

inputValue = inputValue.replace("0", "");
db.getCollection('STUDENT').find( { Studentid:{$regex : inputValue + '[0]*'}});

我真正的建议是使用一个数字作为 ID(无论是 int 还是 long,这样你就可以做到 db.getCollection('STUDENT').find(eq("Sudentid", <inputValue>));

或者如果您正在寻找多名学生

db.getCollection('STUDENT').find(gte("Sudentid", <inputValue>));

返回所有 Studentid 大于或等于 inputValue 的文档。

免责声明:我不确定您使用的是哪个版本的 Mongo 驱动程序,但这里是我使用的文档以及我的答案基于:Mongo Driver Docs

【讨论】:

  • 这种情况在大多数情况下都可以正常工作,除了 DB 中的 2 个学生 ID 123450、1234500,我得到的输入值为 1234500000,在这种情况下,学生 ID 都被获取了。跨度>
  • 如果零是唯一不同的地方,那么您应该仔细检查您的正则表达式。这是一个尝试的好地方:regexr.com
猜你喜欢
  • 1970-01-01
  • 2015-03-12
  • 2014-03-21
  • 2014-05-21
  • 2013-07-27
  • 1970-01-01
  • 2016-01-06
  • 2013-08-13
  • 1970-01-01
相关资源
最近更新 更多