【问题标题】:MongoDB using regex to query array of strings and find the documentMongoDB 使用正则表达式查询字符串数组并查找文档
【发布时间】:2020-10-20 18:36:12
【问题描述】:

我有一个 ORDERS 集合,类似于:

_id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Mumbai City"
totalCost:96

_id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Delhi"
totalCost:96

然后在我的 API 中接收数组形式的数据:

driverCity = ['Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred']

现在如何查询我的 ORDERS 集合,然后检查 ORDER.city 是否作为子字符串存在是我的 driverCity 正则表达式变量?这意味着如果ORDER.city 和这个数组中存在像“mumbai”这样的子字符串,我想要那个结果。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    如果您从 MongoDb 驱动程序查询 Nodejs,那么您可以进行不区分大小写的正则表达式查询:

    
    const driverCity = ['Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred'];
    
    db.collection("ORDERS").find({
        city: new RegExp(driverCity.map(city => `(${city})`).join('|'),'i')
    })
    
    

    注意: mongodb(或任何地方,真的)中的正则表达式查询有点繁重,可能很慢且资源密集。我建议您在 ORDERS 集合中的 city 键被编入索引。

    【讨论】:

    • 我该怎么做?我的意思是如果 driverCity='Mumbai City' 和 order 有 city 'Mumbai' 只是好奇:)
    【解决方案2】:

    将数组元素与| 连接并组成一个字符串,使用$regex 获得匹配的城市,

    let driverCity = ['Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred'].join("|");
    // "Mumbai|Ahmednagar|Yavatmal|Warud|Umred"
    
    db.collection.find({
      city: {
        $regex: driverCity
      }
    })
    

    Playground

    【讨论】:

    • 很酷,我该怎么做呢?我的意思是如果 driverCity='Mumbai City' 和 order 有 city 'Mumbai'
    • mongoplayground.net/p/yUv4wUU6G5z 这是我玩过的链接,但似乎其他方式不起作用:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多