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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/8240.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROBOGUIDE教程:FANUC机器人摆焊焊接功能介绍与虚拟仿真操作方法

目录 摆焊功能简介 摆焊指令介绍 摆焊功能设置 摆焊条件设置 机器人摆焊示教编程 仿真运行 摆焊功能简介 使用FANCU机器人进行弧焊焊接时,也可以实现摆动焊接(简称摆焊)。 摆焊功能是在机器人弧焊焊接时,焊枪面对焊接方向…

面试字节,三面HR天坑,想不到自己也会阴沟里翻船....

阎王易见,小鬼难缠。我一直相信这个世界上好人居多,但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。 在这里,我只想告诫大家,offer一定要拿到自己的手里才是真的,口头offer都是不牢靠的&#xff0…

【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

▒ 目录 ▒🛫 导读开发环境1️⃣ 第8关:多级指针翻译操作验证其它方案🛬 文章小结📖 参考资料🛫 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第8关:多…

MySQL数据库中的函数怎样使用?

函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那么,函数到底在哪儿使用呢? 我们先来看两个场景&a…

【FPGA-Spirit_V2】基于FPGA的循迹小车-小精灵V2开发板

🎉欢迎来到FPGA专栏~基于FPGA的循迹小车 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能…

Android下载apk并安装apk(用于软件版本升级用途)

软件版本更新是每个应用必不可少的功能,基本实现方案是请求服务器最新的版本号与本地的版本号对比,有新版本则下载apk并执行安装。请求服务器版本号与本地对比很容易,本文就不过多讲解,主要讲解下载apk到安装apk的内容。 一、所需…

Socket套接字编程(实现TCP和UDP的通信)

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

(链表)移除链表元素(双指针法)

文章目录前言:问题描述:解题思路(双指针法):代码实现:总结:前言: 此篇是针对链表的经典练习题。 问题描述: 给你一个链表的头节点 head 和一个整数 val ,请…

Js:apply/call/bind、作用域/闭包、this指向(普通,箭头,JS/Vue的this)

目录1、apply/call/bind2、作用域、作用域链和闭包核心1、预处理(解析阶段)——JS执行“代码段”之前2、生成执行上下文环境——对代码段(全局/函数体)进行处理3、执行上下文环境小结4、多个执行上下文环境5、作用域6、作用域和执行上下文7、从【自由变量…

小米万兆路由器里的 Docker 安装 Gitea

小米万兆路由器里的 Docker 安装 Gitea准备工作创建存储查看Docker Hub镜像信息拉取 gitea 镜像和运行容器配置通过 ssh 访问(Optional)其他小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装Gitea。 准备工作 先将一块US…

Java企业级开发学习笔记(2.1)MyBatis实现简单查询

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/zi0wB】 文章目录零、创建数据库与表一、基于配置文件方式使用MyBatis基本使用1.1 创建Maven项目 - MyBatisDemo1.2 在pom文件里添加相应的依赖1.3 创建与用户表对应的用户实体类 - User1.4 创建用…

没有他们,人工智能只能死翘翘

我过去写过一篇文章《很多所谓伟大的贡献,其实都是狗屎运》,今天我也写写人工智能。(1)人才深度神经网络如果不从明斯基和罗森布拉特说起,那就应该可以从1965年Ivakhnenko发明前馈神经网络说起。但关键里程碑是出自Rum…

SpringBoot2核心功能 --- 原理解析

一、Profile功能 为了方便多环境适配,springboot简化了profile功能。 1.1、application-profile功能 默认配置文件 application.yaml;任何时候都会加载指定环境配置文件 application-{env}.yaml激活指定环境配置文件激活 命令行激活:java -…

【快乐手撕LeetCode题解系列】—— 环形链表 II

【快乐手撕LeetCode题解系列】—— 环形链表 II😎前言🙌环形链表 II🙌画图分析:😍思路分析:😍源代码分享:😍总结撒花💞😎博客昵称:博客…

STM32与Python上位机通过USB虚拟串口通信

文章目录前言1. 查看原理图2. 新建工程3.添加代码与烧录4. python代码编写总结问题解决思路前言 在详细阅读广大网友的教程之后,我对STM32和Python通过USB通信的流程烂熟于心。 尝试用ST公司的NUCLEO-L476RG板子进行简单的回环通信测试,发现还是存在网上…

Linux·异步IO编程框架

hi,大家好,今天分享一篇Linux异步IO编程框架文章,对比IO复用的epoll框架,到底性能提高多少?让我们看一看。 译者序 本文组合翻译了以下两篇文章的干货部分,作为 io_uring 相关的入门参考: Ho…

【RocketMQ】顺序消息实现原理

全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用…

Web 攻防之业务安全:接口未授权访问/调用测试(敏感信息泄露)

Web 攻防之业务安全:接口未授权访问/调用测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台(操作系统、数据库,中间件等)、业务系统自身(软件或设备)、业…

ViT/vit/VIT详解

参考: Vision Transformer详解: https://blog.csdn.net/qq_37541097/article/details/118242600 目录: x.1 (论文中)模型理解x.2 代码理解 建议阅读时间:10min x.1 模型理解 ViT是发表在ICLR2021上的一篇文章,通过将图片分割…

Java并发控制 学习笔记1

一、并发控制的方法 1、悲观锁:常用的互斥锁都属于悲观锁,一个线程访问共享资源时其他线程不能访问。 2、乐观锁:允许同时访问共享数据,只有在提交时利用如版本号检查是否有冲突,应用github。 3、什么时候用乐观锁、什…