编辑
2023-10-29
微信小程序
00
请注意,本文编写于 117 天前,最后修改于 115 天前,其中某些信息可能已经过时。

目录

什么是多条件模糊查询(与、或)
云开发如何实现多条件模糊查询的"与"操作
云开发如何实现多条件模糊查询的"或"操作
总结

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

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

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

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

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

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

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

image.png

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

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

js
// 云函数入口文件 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; } };

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

js
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

例如:

js
// 云函数入口文件 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使用,即可灵活实现既定的需求。这种方式不仅提高了查询的灵活性,也为用户提供了更好的搜索体验。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:CreatorRay

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!