sql'喜欢'对mongodb中的数字的操作

时间:2014-06-14 17:21:21

标签: sql mongodb

我试图在mongodb中进行类似于SQL示例的查询:

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

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

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

但它不会返回我想要的内容,因为联系电话是一个号码。

有没有好的做法 - 在数字mongodb上进行此类操作?

编辑:电话号码可能是一个不好的例子。让我们说我需要找到包含数字9的所有数字。我怎么能得到那个?

1 个答案:

答案 0 :(得分:4)

不要将电话号码存储为整数。将它们存储为字符串。如果您的值只包含数字且算术无意义,如邮政编码,银行帐号或电话号码,那么将其存储为数字并没有多大意义。

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

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

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

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