之前的博文中,已经跟大家介绍过,微信小程序云开发如何实现单条件单字段的模糊查询,这个是很常见的业务需求。在一些更复杂的场景下,我们需要实现多条件多字段的模糊查询,比如同时兼容对商品名称、类别、产地等多条件的模糊查询。我们看一下云开发如何实现。
在实际的项目开发时,我们经常需要根据用户输入的多个条件进行数据库查询。而模糊查询是指根据一部分信息来查找数据库中的记录,而不是完全匹配。多条件模糊查询则是在这个基础上,结合多个条件进行查询。
而多条件模糊查询又分"与"和"或"。
"与"操作,就是我们多个条件的模糊查询,同时满足才会被查询到。而"或"操作,就是我们多个条件的模糊查询,只要能对上一个满足的条件,就会被查询到。
例如,我们在对商品的名称、类别、产地进行查询时,要筛选名称中包含"果",类别包含"水",产地包含"河"的条件。"与"操作就需要数据同时满足这三个模糊查询的条件,"或"操作就是满足一个即可。
假设我们有一个存储商品信息的数据库集合 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;
}
};
在小程序页面中请求云函数:
jsPage({
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()
。
例如:
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.or
和 db.command.and
, 搭配 db.RegExp
使用,即可灵活实现既定的需求。这种方式不仅提高了查询的灵活性,也为用户提供了更好的搜索体验。
本文作者:CreatorRay
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!