【问题标题】:How to use regex and match data using find/aggregate?如何使用正则表达式并使用查找/聚合匹配数据?
【发布时间】:2019-08-28 07:26:38
【问题描述】:

我有一个电话号码,例如 +1234567890。在数据库中,电话号码存储为 +123-456-789 或 +123-(456)-(789)。如何使用 MongoDB 查询将我的电话号码 +1234567890 与 +123-456-789 或 +123-(456)-(789) 匹配。

喜欢 {removeSpecialCharacters(phoneno):1234567890}

【问题讨论】:

  • 不,我想在我的数据库集合中找到
  • +123-456-789 或 +123-(456)-(789) 是只有这两种情况,还是还有更多?

标签: javascript node.js mongodb mongodb-query


【解决方案1】:

这是我想出的解决方案,因为我看到你在这个问题中也标记了“javascript”。

这不是一个单一的聚合查询,而是我使用 mongo 脚本(可以用 mongo 执行的 Javascript 文件)中的 forEach 循环遍历每个条目。

数据集

{"name": "SV", phone:"+1234567890"},
{"name": "MV", phone:"+123-(456)-(789)"}

逻辑

var entries = [];
var phone_number_to_be_searched = "+1234567890";
phone_number_to_be_searched = phone_number_to_be_searched.replace(/\D/g,''); 

db.temp.find().forEach(function(entry) {
    var phone = entry["phone"].replace(/\D/g,'');
    if(phone === phone_number_to_be_searched){
        entries.push(entry)
    }
})
print(JSON.stringify(entries));

输出

[{"_id":{"$oid":"5d6cf41ce920d9c4fa760121"},"name":"SV","phone":"+1234567890"}]

如您所见,我们在输出中只有一个条目的电话号码为“1234567890”,而另一个条目缺少“0”。

希望对你有帮助。

【讨论】:

  • 我很感激如果我找到了直接从集合中查找而不获取所有数据并对其进行过滤的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多