微信小程序云开发如何优雅的实现模糊查询

news2024/12/24 2:31:20

微信官方自从推出微信小程序云开发之后,让小程序开发的门槛再次降低,你可以不需要掌握任何后端的语言和数据库,有一些js的基本功,就可以完成一个完整带前后端交互功能的小程序项目。今天我们介绍一个日常开发中非常常见的需求,就是实现模糊查询,这个主要是后端做的,我们看看云开发如何实现。

什么是模糊查询

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

在数据库操作中,模糊查询是一种常见的数据搜索方式,它允许我们根据指定的关键词来匹配数据库中的记录,而不需要完全匹配关键词。模糊查询通常用于处理用户输入的搜索关键词,使得搜索更加灵活和智能。

例如,当用户在前端页面中的某个搜索框中输入"苹果",如果是非模糊查询,就必须精确匹配到某个字段的值为"苹果"。而如果是模糊查询,只要某个字段的值内包含"苹果"都会被查询到,比如:"苹果手机、苹果笔记本、苹果耳机"等。

云开发如何实现模糊查询

在微信小程序中,我们可以借助云开发的数据库服务来实现模糊查询。以下是实现模糊查询的步骤:

初始化云开发环境

首先,在小程序的app.js文件中初始化云开发环境:

// app.js
App({
  onLaunch: function () {
    // 初始化云开发环境
    wx.cloud.init({
      env: 'your-cloud-environment-id',
    })
  }
})

在云开发控制台创建集合

在云开发控制台中创建一个集合(类似于关系型数据库中的表),用于存储需要进行模糊查询的数据。

image.png

编写模糊查询的云函数

在小程序的cloudfunctions目录下创建一个新的云函数,例如searchData

image.png

在该云函数的index.js文件中编写模糊查询的代码:

// cloudfunctions/searchData/index.js
const cloud = require('wx-server-sdk')
cloud.init()

const db = cloud.database()
const _ = db.command

exports.main = async (event, context) => {
  // 用户输入的内容
  const { keyword } = event
  try {
    const result = await db.collection('your-collection-name').where({
      name: db.RegExp({
        regexp: keyword,
        options: 'i', // 不区分大小写
      })
    }).get()
    
    // 返回搜索到的结果
    return result.data;
  } catch (err) {
    console.error(err)
    return err;
  }
}

在上面的代码中,name是需要进行模糊查询的字段,keyword是用户输入的搜索关键词。db.RegExp会根据用户输入的关键词构造一个正则表达式,实现模糊匹配。

在小程序页面调用云函数进行模糊查询

在小程序的页面中,当用户输入搜索关键词后,调用上面创建的云函数进行模糊查询:

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

在上面的代码中,onKeywordInput函数用于监听用户输入的搜索关键词,search函数用于调用云函数进行模糊查询,并将查询结果保存到searchResult中,供页面渲染显示。

总结

通过云开发,我们可以轻松实现小程序中的模糊查询功能。首先,我们需要在云开发控制台创建集合,并在云函数中编写模糊查询的代码。然后,在小程序页面中调用云函数,传入用户输入的关键词,即可获取模糊查询的结果。这种方式简单而高效,为小程序开发提供了强大的数据库支持,使得数据操作更加便捷和灵活。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

转化率(CVR)是什么意思,怎么计算和提高转化率?

转化率指的是在一定时间范围内,企业在线上或线下从事某项营销推广(比如竞价广告)活动时,成功完成转化行为的次数占推广信息总点击次数的百分比率。它是产品营销推广中的一个重要数据指标,转化率越高,成本越…

【教3妹学编辑-算法题】H 指数 II

3妹:2哥早啊, 新的一周开始了,奥利给!!! 2哥 :3妹,今天起的很早嘛,精神也很饱满。 3妹:昨天睡的早,早睡早起好身体! 2哥:既然离时间还…

不定长顺序表2

接下来我们看怎么完成不定长顺序表的代码实现 这里先加一个头文件,名字叫dsqlist.h,存放不定长顺序表的函数定义与声明 然后建立一个名字叫dsqlist.cpp的源文件,跟其头文件配对成一对,(也可以叫别的名字不配对)&…

Java 中的 synchronized 同步锁

导致线程安全问题的根本原因在于,存在多个线程同时操作一个共享资源,要想解决这个问题,就需要保证对共享资源访问的独占性,因此人们在Java中提供了synchronized关键字,我们称之为同步锁,它可以保证在同一时…

力扣每日一题83:删除排序数组中的重复元素

题目描述: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2]示例 2: 输入:head [1,1,2…

Day14力扣打卡

打卡记录 H 指数(二分) 链接 以最大值 x 为分割点的正整数数轴上,满足: 少于等于 x 的数值必然满足条件;大于 x 的数值必然不满足。 采用右边界二分查找,寻找满足条件的最大 H 指数要求。 class Soluti…

shell脚本函数(极其粗糙版)

分界点:以下内容需要更改,正常放假更改 函数: 1、把整个命令序列按照格式写在一起 2、可以方便的重复使用的命令序列 使用函数可以避免代码重复 函数可以将大的工程分割为诺干小的功能模块,可以随时调用,代码的可读…

Windows一键添加命名前缀(文件)

温馨提示:使用前建议先进行测试和原文件备份,避免引起不必要的损失。 (一)需求描述 在上班摸鱼的我正准备打开手机刷会儿CSDN论坛,老板发给我一个压缩包并要求我给里面所有的文件的名称添加一个前缀”大项目_”。我本…

协同过滤音乐推荐系统

摘 要 信息化爆炸的时代,互联网技术的指数型的增长,信息化程度的不断普及,社会节奏在加快,每天都有大量的信息扑面而来,人们正处于数字信息化世界。数字化的互联网具有便捷性,传递快,效率高&am…

windows系统命令常用命令(常看当前路径等)

打开cmd命令行终端 按下 winr 快捷键,输入cmd,点击确定 查看当前路径 输入命令 chdir 查看目录下文件 输入命令 dir //查看当前目录下的文件,类似于linux下的ls cd /d e:\software //跳转到其他硬盘的其他文件夹,注意此处…

Linux权限的概念

文章目录 Linux权限管理01.文件访问者的分类(人)02.文件类型和访问权限(事物属性)03.文件权限值的表示方法04. 调整权限(文件访问权限的相关设置方法) ch系列是改变文件性质的指令;file指令可以…

CS224W2.3——传统基于特征的方法(图层级特征)

前两篇中我们讨论了节点层级的特征表示、边层级的特征表示: CS224W2.1——传统基于特征的方法(节点层级特征)CS224W2.2——传统基于特征的方法(边层级特征) 在这篇中,我们将重点从整个图中提取特征。换句话说,我们想要描述整个图结构的特征…

2.27每日一题(定积分求面积,旋转体体积)

1、遇到求面积、定积分的问题,先画图: (1)抛物线(可正可负,所以抛物线函数需要有 a 变量) (2)过两个点 2、定积分求面积有三种情况对应三条公式: &#xff0…

H5游戏源码分享-像素小鸟游戏(类似深海潜艇)

H5游戏源码分享-像素小鸟游戏&#xff08;类似深海潜艇&#xff09; 点击屏幕控制小鸟的飞行高度 整个小游戏就用JS完成 项目地址&#xff1a;https://download.csdn.net/download/Highning0007/88483228 <!DOCTYPE HTML> <html><head><meta http-equiv…

【C++】智能指针总结:auto_ptr、unique_ptr、share_ptr、weak_ptr(技术介绍 + 代码实现)

文章目录 0. 概述智能指针&#xff0c;智能在哪儿&#xff1f;RAII 的介绍四个智能指针的特点&#xff1a; 1. auto_ptr&#xff08;C98&#xff09;&#x1f40e;核心功能的简单实现 2. unique_ptr&#xff08;C11&#xff09;&#x1f40e;核心功能的简单实现 3. shared_ptr&…

LSMW应用

案 执行第二行 第六步直接跳过.

【2023MathorCup大数据竞赛】B题完整解答过程(思路+模型文档+代码+结果)

B题完整解答过程 写在最后技术文档&#xff08;部分&#xff09;问题分析假设符号说明1 基于自适应ARIMA-LR模型的需求量预测&#xff08;问题一第一小问&#xff09;1.1 ARIMA模型的建立1.2 LR模型的建立1.3 自适应混合ARIMA-LR模型的建立1.4 ARIMA模型的求解1.5 LR模型的求解…

图像分类任务ViT与CNN谁更胜一筹?DeepMind用实验证明

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 今天跟大家分享DeepMind发表的一篇技术报告&#xff0c;通过实验得出&#xff0c;CNN与ViT的架构之间虽然存在差异&#xff0c;但同等计算资源的预…

力扣刷题 day59:10-29

1.子集 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 方法一&#xff1a;二进制枚举 #方法一&#xff1a;二进制枚举 def subsets(nums)…

C# “依赖注入” 中的 “三种生命周期”

&#x1f680;简介 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种实现控制反转&#xff08;IoC&#xff09;的技术&#xff0c;用于减少代码之间的耦合度。通过依赖注入&#xff0c;一个类可以从外部获取其依赖的对象&#xff0c;而不是自己…