Node.js Mongodb检查字符串数组中的任何字符串是否存在另一个字符串

Node.js Mongodb检查字符串数组中的任何字符串是否存在另一个字符串,node.js,mongodb,mongoose,mongodb-query,aggregation-framework,Node.js,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,嘿伙计们我有两套“订单”和“司机” 订单集合类似于 _id:5f8e7d8084378609b2dca93f user_id:"5f8465a777b1814c588521e2" price:96 city:"Mumbai City" totalCost:96 _id:5f84485b0933073435cdee30 name:"Ratnabh Kumar Rai" password:"$2b$10$MSxPYKkdn7Hb

嘿伙计们我有两套“订单”和“司机”

订单集合类似于

_id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Mumbai City"
totalCost:96
_id:5f84485b0933073435cdee30
name:"Ratnabh Kumar Rai"
password:"$2b$10$MSxPYKkdn7HbpjoYCgbg1.RewN5Q26CFxSVLrFqR6e.J4jSNd7G5."
city:[ 'Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred' ]
status:1
这里的城市来自谷歌地图,这意味着我只需在谷歌地图中拖动标记,它将城市设置为“孟买市”

而驱动程序集合就像

_id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Mumbai City"
totalCost:96
_id:5f84485b0933073435cdee30
name:"Ratnabh Kumar Rai"
password:"$2b$10$MSxPYKkdn7HbpjoYCgbg1.RewN5Q26CFxSVLrFqR6e.J4jSNd7G5."
city:[ 'Mumbai', 'Ahmednagar', 'Yavatmal', 'Warud', 'Umred' ]
status:1
其中城市由管理员手动分配

我想过滤掉的是,我的订单集合中的城市是否在司机集合中……我一直在做的是

let driverCity = data.city; /////city is the driver city which i am sending from front-end/////
那么现在driverCity=[‘孟买’、‘艾哈迈德纳加尔’、‘亚瓦特马尔’、‘瓦鲁德’, 而秩序之城仍然是“孟买之城”

但它检查了确切的元素,所以如果谷歌设置“孟买”而不是“孟买城”,这将是完美的,但现在我有了“孟买城”,我该怎么办


无论如何,我可以检查driverCity数组中的任何字符串是否以order city或任何其他方式存在?

您可以使用
RegExp
(正则表达式)来匹配Mongo中的部分数据

let doc = await db
.collection("orders")
.find({
  $and: [
    { city: new RegExp(driverCity,'i') },  // 'i' is for ignore case
  ],
})
.toArray();
如果希望更好地控制搜索内容,还可以使用regexp通配符和控制字符:

new RegExp(`^${driverCity}`,'i') // search cities starting with "Mumbai"
甚至在搜索中添加可选的
City
字符串:

new RegExp(`^${driverCity}(\\s+City)$`,'i') // search either Mumbai or Mumbai City

无论如何,ReGEX搜索速度相当慢,可能导致不精确的结果,所以考虑修改谷歌之前的数据,然后将其插入到<代码> Orths< /Cord>集合中,方法将与您的驱动程序顺序搜索匹配。