javascript - 是否可以使用排除 / ingore 字符串选项在 mongoose 中进行查询
问题描述
我不太清楚如何用几句话来解释标题。如果有使标题更易于理解的建议,请告诉我。
无论如何,我想问的是,我正在尝试通过 db 中的电话号码进行查询,但是 db 中的电话号码有两种不同的样式,一种是带有破折号的,一种是没有的
所以在 db 中,电话字段可能是
{phone: '1234567890'}
{phone: '123-456-1111'}
当用户尝试搜索号码时,用户可能会输入完整的 10 位数字1234561111
或123-456-1111
. 当然,我可以替换所有破折号123-456-1111
并成功1234561111
。
但是1234561111
仍然不匹配数据库来查询它。
我可以通过什么方式让这个查询工作。目前mongoose
用来做查询。
提前感谢您的任何帮助和建议。
解决方案
如果我没记错的话,您想在 db 中搜索“1234567890”,其中电话可能是“123-456-7890”或“1234567890”。所以有两种技术。
第一个是:通过正则表达式搜索。这将匹配“123-456-7890”和“1234567890”。
db.test.find({phone: /123\-?456\-?7890/})
第二:如果您不想篡改搜索字符串,解决方案是使用聚合。
对于 MongoDB 4.4
db.test.aggregate([
{
$addFields: {
extractedPhone: { $replaceAll: { input: "$phone", find: "-", replacement: "" } }
}
},
{
$match: {
extractedPhone: "1234567890"
}
},
{
$project: {
extractedPhone: 0
}
}
])
对于旧版本的 MongoDB
db.test.aggregate([
{
$addFields: {
extractedPhone: {
$reduce: {
input: { $split: ["$phone", "-"]},
initialValue: '',
in: {
$concat: ['$$value', '$$this']
}
}
}
}
},
{
$match: {
extractedPhone: "1234567890"
}
},
{
$project: {
extractedPhone: 0
}
}
])
推荐阅读
- julia - 在 Catalina 机器上安装 Julia 0.6.4
- switch-statement - 如何在switch语句中使用变量
- jquery - Svelte 和 Jquery - Dropdown.svelte:7 Uncaught TypeError: jquery(...).dropdown is not a function
- python - 用不同的填充符号填充其他多边形内的多边形
- python - Python多项式回归绘制错误?
- image-processing - 为什么使用 x*cos(a)+y*sin(a)=r 而不是 a=-b*x+y 进行霍夫变换?
- google-cloud-functions - 谷歌云函数响应消息的数字签名
- javascript - 为 Highcharts 圆环图转换组 json
- python - 给定一个元组列表,如果第一个元素相同,我如何在每个相似的元组中添加第二个元素
- math - Xbee3 - 没有数学模块的三角值计算