unicloud 模糊查询解决方案

        1、whereaggregate的模糊搜索

        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()

猜你喜欢

转载自blog.csdn.net/xuelang532777032/article/details/129656905