mongodb中的查询条件
关键字说明
$or
或关系
$nor
或关系取反
$gt
大于
$gte
大于等于
$lt
小于
$lte
小于等于
$ne
不等于
$in
在多个值范围内
$nin
不在多个值范围内
$all
匹配数组中多个值
$regex
正则,用于模糊查询
$size
匹配数组大小
$maxDistance
范围查询,距离(基于LBS)
$mod
取模运算
$near
邻域查询,查询附近的位置(基于LBS)
$exists
字段是否存在
$elemMatch
匹配内数组内的元素
$within
范围查询(基于LBS)
$box
范围查询,矩形范围
$center
范围查询,圆形范围
$centerSphere
范围查询,球形范围
$slice
查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
mongodb中的查询语句
db.movies.find({‘name‘:/未来/})
db.collection.find( { field: { $regex: ‘acme.*corp‘, $options: ‘i‘ } } );
官方举例是通过 ‘/.../‘ 和$regex,这两种都可以查询到结果。
现在我想实现查询标题关键字匹配到对应文章。
如下:
1.查询title字段中包含某个字符串的集合:
Article.find({"title":{$regex: /searchValue/,$options:‘i‘}}, (err, data) => { //{"title": /searchValue/} $options:‘i‘ 表示忽略大小写
if(err) {
console.log(err)return res.status(500).json({
result:1,
error_info: err.message
})
}
console.log(data)
let length=data.lengthreturn res.status(200).json({
result:0,
count: length,
searchArticle: data
})
})
searchValue是前端传过来的查询关键词。
这么写好像没有问题,跟官方实例一样,但是查询不到结果。
请注意,MongoDB的的模糊查询是通过正则表达式实现的,对应mongodb中,可以直接使用 ‘/../’ 斜杠。
但是在nodejs中,必须要使用RegExp,来构建正则表达式对象。
router.post(‘/like_article_search‘, (req,res) =>{
let searchValue=req.body.value
console.log(searchValue)var str=".*"+searchValue+".*$"
var reg = newRegExp(str)
Article.find({"title":{$regex:reg,$options: ‘i‘}}, (err, data) => { //$options:‘i‘ 表示忽略大小写
if(err) {
console.log(err)return res.status(500).json({
result:1,
error_info: err.message
})
}
console.log(data)
let length=data.lengthreturn res.status(200).json({
result:0,
count: length,
searchArticle: data
})
})
})
这样就可以匹配到查询结果。
2.查询以某个字母开头的集合
mongodb语法:
db.UserInfo.find({userName :/^A/})
nodejs中写法:
router.post(‘/like_article_search‘, (req,res) =>{
let searchValue=req.body.value
console.log(searchValue)var str="^.*"+searchValue+".*$"
var reg = newRegExp(str)
Article.find({"title":{$regex:reg,$options: ‘i‘}}, (err, data) => { //{"title": /searchValue/} $options:‘i‘ 表示忽略大小写
if(err) {
console.log(err)return res.status(500).json({
result:1,
error_info: err.message
})
}
console.log(data)
let length=data.lengthreturn res.status(200).json({
result:0,
count: length,
searchArticle: data
})
})
})
3.多条件模糊查询
使用$or 语法。
多字段匹配,title、categroy、lable中包含查询关键词的都进行匹配
//模糊查询
router.post(‘/like_article_search‘, (req,res) =>{
let searchValue=req.body.value//console.log(searchValue)
//var str=".*"+searchValue+".*$"
//var reg = new RegExp(str)
var reg = newRegExp(searchValue);var _filter ={//多字段匹配
$or: [
{‘title‘: {$regex: reg}},
{‘categroy‘: {$regex: reg}},
{‘lable‘: {$regex: reg}},
]
}
Article.find(_filter, (err, data)=> { //{"title": /searchValue/} $options:‘i‘ 表示忽略大小写
if(err) {
console.log(err)return res.status(500).json({
result:1,
error_info: err.message
})
}
console.log(data)
let length=data.lengthreturn res.status(200).json({
result:0,
count: length,
searchArticle: data
})
})
})
这样就可以实现。还可以通过某个字段对搜索结果进行降序或升序排列。
原文:https://www.cnblogs.com/lyt0207/p/13260055.html