sql 'like'对mongodb中数字的操作

标签 sql mongodb

我正在尝试在 mongodb 中执行类似于 SQL 示例的查询:

SELECT * from example where contactphone like '4832%'; 

我的第一个想法是做这样的事情:

db.example.find({ contactphone: /^4832/ })

但它没有返回我要查找的内容,因为联系电话是一个数字。

在 mongodb 中对数字进行此类操作是否有任何好的做法?

编辑:电话号码可能是一个不好的例子。比方说我需要找到所有包含数字 9 的数字。我怎样才能做到这一点?

最佳答案

不要将电话号码存储为整数。将它们存储为字符串。当您有一个仅由数字组成且算法毫无意义的值(如邮政编码、银行帐号或电话号码)时,将其存储为数字没有多大意义。

  • 正如您已经注意到的,当您想搜索数字序列时,几乎不可能搜索到数字,因为计算机系统以二进制而不是十进制存储整数。
  • 不能有前导零
  • 当数字太长时,您要么遇到整数溢出,要么将其转换为 float (由您的 MongoDB 驱动程序自行决定)。两者都会导致非常奇怪的行为。

顺便说一句,所有这些都适用于几乎所有数据库,而不仅仅是 MongoDB。

但是如果您绝对下定决心将它们保留为数字,您可以做以下两件事。

  1. 当未知数字的数量固定时,您可以使用 $gt$lt 运算符来搜索范围。 contactphone:{$gt:5556000, $lt:5556999} 会找到所有具有 5556xxx 模式的号码。
  2. 你可以使用 $where -query 使用 javascript 函数在内部将每个数字转换为字符串,然后将正则表达式应用于该字符串。 $where: "String(this.contactphone).match(/^4832/) != null"。我希望您的数据库中没有太多文档,因为当您这样做时,此查询可能需要一段时间。

关于sql 'like'对mongodb中数字的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24222428/

相关文章:

sql - 如何避免为准备好的语句的每一行启动触发器?

sql - 如何对包含左括号字符的字符串执行带有 LIKE 条件的 SQL SELECT?

mysql - 从多个表中检索信息的 SQL 语句

mongodb - 使用正则表达式删除 MongoDB 集合

java - 使用 Java 将 byte[] 存储在 MongoDB 中

javascript - MongoDB + Express : How to verify login credentials using db. collection().findOne() 还是 .find()?

mongodb - ReactiveMongo 和 JSON4S

sql - oracle问题中的左外连接

sql - 计数不同的ID,然后按不同的ID分组,产生不正确的计数

arrays - Mongoose 的事务行为