> 文章列表 > unicloud 模糊查询解决方案

unicloud 模糊查询解决方案

unicloud 模糊查询解决方案

        1、whereaggregate的模糊搜索

        2、第一种是“你好”去匹配“你好啊大家”

        3、第二种是“家啊”去匹配“啊!你家呢” 只要有1个字匹配就匹配

        4、第三种是“家啊”去匹配“啊!你家呢” 必须有“家”又有“啊”才匹配”

        想看效果,大家可以自己搜下

看效果

                

        

一、where的模糊搜索

1、第一种你好”去匹配“你好啊大家”

        const db = uniCloud.database()const dbCmd = db.commandlet 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.commandlet 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.commandlet 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()