是否可以在数字而不是字符串上使用正则表达式?
例如:我在mongodb中有一个字段,其中包含数值1234567(未存储为字符串以进行排序等)。 现在我想使用正则表达式来查找这个数字的部分,即456。
在包含字符串"1234567"
的数据库字段上,这很简单:我只是将re.compile("456")
传递给我的数据库查询。但re.compile(456)
让我得到以下信息:
TypeError: first argument must be string or compiled pattern
有关如何完成此任务的任何提示?将我的数字存储为字符串并不是一个选项,因为我会失去许多其他可能性(如gt / lt,sort等)。
更新 另外,我正在将正则表达式传递给db-query以过滤结果,因此我无法提取单个字段,将其内容转换为字符串,然后在其上使用正则表达式。
答案 0 :(得分:2)
您可以使用内置的str
函数将数字转换为字符串:
str(456)
答案 1 :(得分:1)
标记为重复:MongoDB Regex Search on Integer Value
db.test.find({ $where: "/^123.*/.test(this.example)" })
{ "_id" : ObjectId("4bfc3187fec861325f34b132"), "example" : 1234 }
答案 2 :(得分:0)
MongoDB无法做到这一点。根据您的应用程序,您可以将这些数字存储为字符串类型的值而不是数字。在Python中:
db.collection.insert({"my_number": "12345678"})
对于像$inc
这样的算术运算没有意义的电话号码或邮政编码,但想要使用正则表达式搜索数据的地方,这可能是有道理的。
另一种方法是将每个数字两者存储为字符串和数字:
db.collection.insert({"s": "12345678", "n": 12345678})