微信小程序云开发如何实现多条件多字段模糊查询

news/2024/5/20 10:03:24 标签: 微信小程序, 小程序, serverless

之前的博文中,已经跟大家介绍过,小程序>微信小程序云开发如何实现单条件单字段的模糊查询,这个是很常见的业务需求。在一些更复杂的场景下,我们需要实现多条件多字段的模糊查询,比如同时兼容对商品名称、类别、产地等多条件的模糊查询。我们看一下云开发如何实现。

什么是多条件模糊查询(与、或)

公众号:Code程序人生,个人网站:https://creatorblog.cn

在实际的项目开发时,我们经常需要根据用户输入的多个条件进行数据库查询。而模糊查询是指根据一部分信息来查找数据库中的记录,而不是完全匹配。多条件模糊查询则是在这个基础上,结合多个条件进行查询。

而多条件模糊查询又分"与"和"或"。

"与"操作,就是我们多个条件的模糊查询,同时满足才会被查询到。而"或"操作,就是我们多个条件的模糊查询,只要能对上一个满足的条件,就会被查询到。

例如,我们在对商品的名称、类别、产地进行查询时,要筛选名称中包含"果",类别包含"水",产地包含"河"的条件。"与"操作就需要数据同时满足这三个模糊查询的条件,"或"操作就是满足一个即可。

云开发如何实现多条件模糊查询的"与"操作

image.png

假设我们有一个存储商品信息的数据库集合 products,其中每个商品有 name(商品名称)和 category(商品类别)两个字段。我们希望用户可以同时输入商品名称和类别进行查询,匹配同时满足的数据。

在云函数中,可以新建searchData函数使用以下代码实现多条件同时满足的模糊查询:

// 云函数入口文件
const cloud = require('wx-server-sdk');
cloud.init();

const db = cloud.database();

// 云函数入口函数
exports.main = async (event, context) => {
  const { name, category } = event;
  try {
    const result = await db.collection('products')
      .where(
        db.command.and([
          {
            name: db.RegExp({
              regexp: name,
              options: 'i',
            }),
          },
          {
            category: db.RegExp({
              regexp: category,
              options: 'i',
            }),
          },
        ])
      )
      .get();
    return result.data;
  } catch (err) {
    console.error(err);
    return err;
  }
};

小程序页面中请求云函数:

Page({
    data: {
        name: '',
        category: '',
        searchResult: []
    },
    
   onNameInput(e) {
    this.setData({
      name: e.detail.value
    })
   },
   
   onCategoryInput(e) {
    this.setData({
      category: e.detail.value
    })
   },
    
    async searchData() {
        const { name, category } = this.data;
        if (name.trim().length === 0 && category.trim().length === 0) {
          wx.showToast({
            title: '请输入搜索关键词',
            icon: 'none'
          })
          return;
        }
        wx.showLoading({
          title: '搜索中...',
        })
        try {
          const res = await wx.cloud.callFunction({
            name: 'searchData',
            data: {
              name,
              category,
            }
          });
          this.setData({
            searchResult: res.result
          })
        } catch (err) {
          console.error(err)
          wx.showToast({
            title: '搜索失败',
            icon: 'none'
          })
        } finally {
          wx.hideLoading()
        }
    }
})

云开发如何实现多条件模糊查询的"或"操作

单一满足和同时满足在实现方式上,只有一点点区别,在使用云数据库API时,同时满足是db.command.and(),单一满足是db.command.or()

image.png

例如:

// 云函数入口文件
const cloud = require('wx-server-sdk');
cloud.init();

const db = cloud.database();

// 云函数入口函数
exports.main = async (event, context) => {
  const { name, category } = event;
  try {
    const result = await db.collection('products')
      .where(
        db.command.or([
          {
            name: db.RegExp({
              regexp: name,
              options: 'i',
            }),
          },
          {
            category: db.RegExp({
              regexp: category,
              options: 'i',
            }),
          },
        ])
      )
      .get();
    return result.data;
  } catch (err) {
    console.error(err);
    return err;
  }
};

总结

通过以上的方法,我们可以实现在小程序>微信小程序云开发中进行多条件模糊查询。

首先要清楚了解自己的业务场景,在多条件查询的前提下,是需要同时满足,还是单一满足。再选择对应的云数据库API db.command.ordb.command.and, 搭配 db.RegExp使用,即可灵活实现既定的需求。这种方式不仅提高了查询的灵活性,也为用户提供了更好的搜索体验。


http://www.niftyadmin.cn/n/5137001.html

相关文章

人工智能AI 全栈体系(九)

第一章 神经网络是如何实现的 如何用神经网络处理不等长文本的方法? 八、循环神经网络(RNN: Recurrent Neural Network) 处理不等长文本的神经网络 – 循环神经网络 RNN。 1. 从句子理解说起 上次讲了用词向量表示词,一句话也…

[ASP]今客CRM客户管理系统 v16.0

源码下载:https://download.csdn.net/download/m0_66047725/88452236 今客CRM客户管理系统主要是为了帮助企业解决在日常工作中遇到的客户管理等难题而开发,通过今客CRM客户管理系统可以对企业事务中的不同功能进行操作,用户通过自定义字段类…

[PHP]PESCMS Ticket客服工单系统 v1.3.19

源码下载:https://download.csdn.net/download/m0_66047725/88452232 PESCMS Ticket客服工单系统(下称PT)是一款基于GPLv2协议发布的开源客服工单系统。除了传统的站内工单提交模式,我们以全新的设计理念,基于Javascript语言开发的跨域工单提…

让GPT替我写vue3代码,看的我血压升高

事情是这样子的,最近在写Vue3相关的代码,就想着能不能让GPT辅助我写代码,于是,我就先写了一个中文的prompt Prompt1: 使用vue3写一个用户登录的页面 分割线内部是GPT的回答: 使用 Vue 3 来创建一个用户登录页面需要涉…

记一次 AWD 比赛中曲折的 Linux 提权

前提背景: 今天一场 AWD 比赛中,遇到一个场景:PHP网站存在SQL注入和文件上传漏洞, MYSQL当前用户为ROOT,文件上传蚁剑连接SHELL是权限很低的用户。我需要想办法进行提权,才能读取到 /root 目录下的 flag。 一、sqlmap …

Canvas录制视频

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

若依spring-boot myBatis Xml查询部分字段为null的解决方案

原因很简单 &#xff0c;仔细看发现都是带有下划线的字段无法查询&#xff0c;因为实体类的命名是驼峰&#xff0c;和数据库不对应&#xff0c;这时候只需要在myBatis-config.xml中配置一下使用驼峰转换即可。因为默认是关闭的。 <!-- 使用驼峰命名法转换字段 --> <s…

剑指offer --- 字符串中替换空格

目录 前言 一、读懂题目 二、思路分析 三、代码呈现 总结 前言 作为引入讲讲这道题的由来&#xff0c;在网络编程中&#xff0c;如果 URL 参数中含有特殊字符&#xff0c;如空格、#等&#xff0c;可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务…