繁体   English   中英

MongoDB 使用正则表达式查询字符串数组并查找文档

[英]MongoDB using regex to query array of strings and find the document

我有一个订单集合,如下所示:

_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变量的子字符串? 这意味着如果像“mumbai”这样的子字符串出现在ORDER.city和这个数组中,我想要那个结果。

如果您从 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键编入索引。

|连接数组元素并制作一个字符串,使用$regex获取匹配的城市,

let driverCity = ['Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred'].join("|");
// "Mumbai|Ahmednagar|Yavatmal|Warud|Umred"

db.collection.find({
  city: {
    $regex: driverCity
  }
})

操场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM