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

34 篇文章 18 订阅
22 篇文章 3 订阅

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

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

公众号: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使用,即可灵活实现既定的需求。这种方式不仅提高了查询的灵活性,也为用户提供了更好的搜索体验。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CreatorRay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值