mongoose多条件模糊查询实例
mongoose多条件模糊查询
这是今天手头项目中遇到的一个问题,关于mongoose如何实现类似于SQL中 nick LIKE '%keyword%' or email LIKE '%keyword%' 这种多条件模糊搜索的问题。 查阅了mongoose文档才得以实现,特此记录一下。
主要用到了query.$or和query.$regex这两个find参数。
其中query.$or用于实现多条件查询,其值是一个数组。相关文档
示例代码:
query.or([{ color: 'red' }, { status: 'emergency' }])
query.$regex用于实现模糊查询。相关文档
示例代码:
{ <field>: { $regex: /pattern/, $options: '<options>' } }
{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }
通过以上两个参数就可以实现多条件模糊查询了。以User表为例,通过输入一个关键字,来匹配昵称或者邮箱与关键字相近的记录。
示例代码:
const keyword = this.params.keyword //从URL中传来的 keyword参数
const reg = new RegExp(keyword, 'i') //不区分大小写
const result = yield User.find(
{
$or : [ //多条件,数组
{nick : {$regex : reg}},
{email : {$regex : reg}}
]
},
{
password : 0 // 返回结果不包含密码字段
},
{
sort : { _id : -1 },// 按照 _id倒序排列
limit : 100 // 查询100条
}
)
实例代码
var local = require('./models/local')
app.get('/local/repeat', function (req, res) {
var keyword = req.query.keyword // 获取查询的字段
var _filter={
$or: [ // 多字段同时匹配
{cn: {$regex: keyword}},
{key: {$regex: keyword, $options: '$i'}}, // $options: '$i' 忽略大小写
{en: {$regex: keyword, $options: '$i'}}
]
}
var count = 0
local.count(_filter, function (err, doc) { // 查询总条数(用于分页)
if (err) {
console.log(err)
} else {
count = doc
}
})
local.find(_filter).limit(10) // 最多显示10条
.sort({'_id': -1}) // 倒序
.exec(function (err, doc) { // 回调
if (err) {
console.log(err)
} else {
res.json({code: 0, data: doc, count: count})
}
})
})
local.js
var mongoose = require('./db.js'),
Schema = mongoose.Schema;
var LocalSchema = new Schema({
key : { type: String }, //变量
en: {type: String}, //英文
cn: {type: String}, //中文
tn : { type: String} //繁体
});
module.exports = mongoose.model('Local',LocalSchema);
db.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
// yay!
});
module.exports = mongoose;
参考:https://smohan.net/blog/qz1etc
mongoose多条件模糊查询实例的更多相关文章
- asp下实现多条件模糊查询SQL语句
常写一个简单的模糊查询的SQL语句格式可以如下例: sql="select * from 表名 where 字段名 like ’%" & request.form(&quo ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架 ...
- 实现多条件模糊查询SQL语句
很多网友问到如何写模糊查询语句和多条件查询,这里我整理了一下,假设以姓名.性别.电话号...作为数据库中的字段名. 通常写一个简单的模糊查询的SQL语句格式可以如下例: sql="selec ...
- JSP+Servlet+javabean+oracle实现页面多条件模糊查询
之前写过一篇JSP+Servlet+javabean+mysql实现页面多条件模糊查询 使用的是mysql进行的分页查询,mysql用limit控制,而oracle则是用rownum,今天第一次写or ...
- thinkphp5.0多条件模糊查询以及多条件查询带分页如何保留参数
1,多条件模糊查询 等于:map[‘id′]=array(‘eq′,100);不等于:map[‘id′]=array(‘eq′,100);不等于:map[‘id’] = array(‘neq’,100 ...
- laravel多条件模糊查询
1.运用cmd在项目根目录下创建路由组 php artisan make:controller queryController --resource 1.1数据库信息(student) CREATE ...
- JSP+Servlet+javabean+mysql实现页面多条件模糊查询
需求: 一般列表页上面会有一个查询框,有各种的查询条件组合,一般都采用模糊查询方式 ,以下以自己做的实例来说明一下实现方法: 需要实现的界面原型:要满足条件: 1.单选分类,点GO按扭 2.单独输入标 ...
- 【转】SQL多条件模糊查询解决方案-存储过程
前言: 算法的基本特性在前几篇博客中已经做了详细的说明,经过不断的改进优化,到归仓的时候了,也就是说,该算法告一段落,不再更新. 作为最终的解决方案,简要的总结一下算法特性,以方便读者参阅. l ...
- 查询拼接SQL语句,多条件模糊查询
多条件查询,使用StringBuilder拼接SQL语句,效果如下: 当点击按钮时代码如下: private void button1_Click(object sender, EventArgs e ...
随机推荐
- 以太坊挖矿源码:clique算法
上文我们总结了以太坊最主要的共识算法:ethash算法,本文将重点分析以太坊的另一个共识算法:clique. 关键字:clique,共识算法,puppeth,以太坊地址原理,区块校验,认证结点,POA ...
- kubernetes入门(09)kubernetes1.7集群安装(2017/11/13)
CentOS7.3利用kubeadm安装kubernetes1.7.3完整版(官方文档填坑篇) https://www.cnblogs.com/liangDream/p/7358847.html 一. ...
- MSSQl 事务的使用
事务具有以下四个特性: 1.原子性 事务的原子性是指事务中包含的所有操作要么全做,要么全不做. 2.一致性 在事务开始以前,数据库处于一致性的状态,事务结束后,数据库也必须处于一致性状态. 3.隔离性 ...
- intelj idea 创建聚合项目(典型web项目,包括子项目util、dao、service)
需求:第三方提供了http api接口,我们需要将其数据全部取回来,存放到本地Mysql数据库. 开发工具是intelj idea,准备基于maven创建聚合项目,util作为工具包,单独作为一个工程 ...
- Oracle12c:创建主分区、子分区,实现自动分区插入效果
单表自动单个分区字段使用方式,请参考:<Oracle12c:自动分区表> 两个分区字段时,必须一个主分区字段和一个子分区字段构成(以下代码测试是在oracle12.1版本): create ...
- MySQL导致错误的语句
主键不唯一 由于表定义中创建了主键约束,因此MySQL将会确保重复主键不会被插入到数据表中. INSERT INTO person (person_id, fname, lname, gender, ...
- [python]_ELVE_pip2和pip3如何共存
作者:匿名用户链接:https://www.zhihu.com/question/21653286/answer/95532074来源:知乎著作权归作者所有,转载请联系作者获得授权. 想学习Pytho ...
- jsonViewer json格式化工具
以前一直以来都觉得xml个可读性要比json的可读性好,后来使用了JSON Viewer这个小工具之后,发现自己错了.之前认为json的可读性差,完全是因为没有很好的查看工具.JSON Viewer这 ...
- C#之winform实现文件拖拽功能
将一个文件拖拽到窗体的某个控件时,将该控件的路径显示在该控件上,只要拿到了路径自然可以读取文件中的内容了 将一个控件的属性AllowDrop设置为true,然后添加DragDrop.DragEnter ...
- JavaScript数据结构与算法(六) 链表的实现
// 链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的.每个 // 元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成.下图展 // 示了一个链表的 ...