我正在尝试使用起始电话号码模式622从集合中检索用户。
我尝试使用$ regexp表达式,但我认为重点是字符串,电话号码是数字。
db.alumnes.find({telefon: /^622/})
这不会检索任何内容,但是,该集合包含具有该起始模式的元素。
有人可以帮助我看看我做错了什么吗?
答案 0 :(得分:0)
正如你刚才提到的正则表达式适用于字符串因此上述查询将无法正常工作。但是,使用数学运算,我们可以获得数字的前三位数,然后将其与622进行比较以获得所有电话号码。 mongodb查询下面使用聚合框架来获取所需的结果(它可能不适用于负数或少于4位的数字)。
* Get total digits in the number using log base 10
* Subtract 3
* Raise the result to power of 10
* Perform floor division to get the first 3 digits of the number
* Finally compare the 3 digits obtained with 622.
db.alumnes.aggregate([{"$project":{"_id":1,"telefon":1, bits:{"$floor":{"$divide":["$telefon",{"$pow":[10,{"$add":[{$ceil:{"$log10":"$telefon"}},-3]}]}]}}}},{"$match":{"bits":622}}])