序
1、where和aggregate的模糊搜索
2、第一种是“你好”去匹配“你好啊大家”
3、第二种是“家啊”去匹配“啊!你家呢” 只要有1个字匹配就匹配
4、第三种是“家啊”去匹配“啊!你家呢” 必须有“家”又有“啊”才匹配”
想看效果,大家可以自己搜下
看效果
一、where的模糊搜索
1、第一种你好”去匹配“你好啊大家”
const db = uniCloud.database()
const dbCmd = db.command
let text=params.text;//用户文本输入的值
let newSearch=await db.collection("news")
.where(dbCmd.or(
{
title:new RegExp(text, 'g')
},
{
about:new RegExp(text, 'g')
}
)
)
.get()
new RegExp(params.text, 'g') 那个g的意思 ==》JavaScript RegExp 对象 | 菜鸟教程
然后 uni-app的官方文档只是提了下==》uni-app官网
如果你数据库的一条数据是 ↓↓↓↓↓↓
{
name:"你在哪里呀",
about:"你说呢,当然是去你家"
}
2、第二种“家啊”去匹配“啊!你家呢” 只要有1个字匹配就匹配
然后你想用户输入“你家去”想匹配到这条数据,那就得把用户输入的“你家”拆分成 “你”和“家”和“去”,然后变成new RegExp("你|家|去", 'g')
来看下面到代码↓↓↓↓
const db = uniCloud.database()
const dbCmd = db.command
let text=params.text;//用户文本输入的值
text=text.split("").join("|") // 这个结果是 ==> "你|家|去|"
let newSearch=await db.collection("news")
.where(dbCmd.or( //这个是“或”关系 相当于 => "if(a||b){}的||" 这个备注是给没后端基础的小伙伴看的
{
title:new RegExp(text, 'g')
},
{
about:new RegExp(text, 'g')
}
)
)
.get()
3、第三种“家啊”去匹配“啊!你家呢” 必须有“家”又有“啊”才匹配”
如果是where就把match里面的直接放where里就可以了。没差的
const db = uniCloud.database()
const dbCmd = db.command
let text=params.text;//用户文本输入的值
let titleRegArr=[]
let aboutRegArr=[]
text.split("").forEach((v,i)=>{
titleRegArr.push({ //会变成这样 [{about: /家/gi},{about: /啊/gi}]
title:new RegExp(v, 'ig')
})
aboutRegArr.push({
about:new RegExp(v, 'ig')
})
})
let newSearch=await db.collection("news")
.aggregate()
.match(dbCmd.or(
{
title:dbCmd.and(titleRegArr)
},
{
about:dbCmd.and(aboutRegArr)
}
)
)
二、聚合查询的过滤
let newSearch=await db.collection("news")
.aggregate()
.match(dbCmd.or(
{
title:new RegExp(text, 'g')
},
{
about:new RegExp(text, 'g')
}
)
)
.end()