分享一下刚刚解决的一个问题:
多字段模糊搜索,比如数据有 书名和作者。最简单的搜索是搜索书名或作者的关键字,但是想同时搜索书名和作者怎么办呢,这里用到了mongoose的操作符$all
话不多说直接上代码
这里key是搜索框中的值,多条件搜索时以空格分隔,keys是存储了关键字段值得数组
key进来后先用split()已空格分隔成数组,数组里每个值都对应一个条件,有几个值就循环几次 把条件push进条件数组arrKey,然后给query.$and = arrKey,这样用qurey去查询就可以了
if (params.key) {
let arr = []
let arrKey = []
// key含空格则分割关键词进行搜索
if (params.key.indexOf(' ') !== -1) {
arr = params.key.split(' ')
arr.forEach(akey => {
arrKey.push({
keys: {
$regex: akey,
$options: 'gi'
}
})
})
} else {
arrKey = [{
keys: {
$regex: params.key,
$options: 'gi'
}
}]
}
query.$and = arrKey
}
最后根据query查询数据:
let book = await Book.find(query)
结果就不放上来了,这样此问题解决,有疑问欢迎在文章下评论。