如何解决Mongodb检查字符串数组中是否存在其他字符串
嗨,我有“ ORDERS”和“ DRIVERS”两个集合
ORDER集合就像
_id:5f8e7d8084378609b2dca93f
user_id:"5f8465a777b1814c588521e2"
price:96
city:"Mumbai City"
totalCost:96
所以这里的城市来自Google地图,这意味着我只需在Google地图中拖动标记即可将城市设置为“孟买城市”
DRIVER集合就像
_id:5f84485b0933073435cdee30
name:"Ratnabh Kumar Rai"
password:"$2b$10$MSxPYKkdn7HbpjoYCgbg1.RewN5Q26CFxSVLrFqR6e.J4jSNd7G5."
city:[ 'Mumbai','Ahmednagar','Yavatmal','Warud','Umred' ]
status:1
城市是由管理员手动分配的
我想要过滤的是我的ORDERS集合中的城市是否在DRIVERS集合中....直到现在我在做什么
let driverCity = data.city; /////city is the driver city which i am sending from front-end/////
所以现在driverCity = ['孟买','艾哈迈德纳加尔','亚瓦特马尔','瓦鲁德' 'Umred']和订购城市仍为“孟买城市”
let doc = await db
.collection("orders")
.find({
$and: [
{ city: { $in: driverCity } },],})
.toArray();
但是它会检查确切的元素,因此,如果Google将“孟买”而不是“孟买市”设置为完美,但是现在我拥有“孟买市”了,我该怎么办?
无论如何,我可以检查driverCity数组中的任何字符串是否以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
无论如何,正则表达式搜索要慢得多,并且可能导致结果不准确,因此在将数据插入到orders
集合中之前,请考虑修改来自Google的数据,以便以后与驱动程序顺序搜索相匹配
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。