sails 框架下 Waterline ORM 常用查询方法
文章目录
之前有一篇简单介绍了 Sails下orm框架 waterline
Waterline 常用的查询方法
find 条件查询
事例:
models.user.find().exec(function(err, models) {
if(err)
return res.json({ err: err }, 500);
});
上面事例的 find 方法无参数,相当于全表查询,最后执行 exec 方法拿到数据.
现在我们来看下 find 方法可以接受哪些参数呢.
find 方法可以接收 3类参数:
- 过滤条件 where
- 查询条数限制 skip 和 limit
- 排序条件 sort
示例:
models.user.find({ where: { name: '一介布衣' }, skip: 10, limit: 10, sort: 'name DESC' });
从模型 user 映射的表中查询 name='一介布衣' 的数据,以 name 字段倒序.
在查询的数据中,选择第10条开始,第20条结束
类似 sql 语句中的
SELECT * FROM user LIMIT 10,10
如果我们没有排序,没有过滤条数时, where 关键词可以省略:
models.user.find({name:'一介布衣'}); //可以多条件
查询 user model 中 name='一介布衣' 的用户
sql 中类似 where name='一介布衣'
字段包含某关键词 contains
models.user.find({
name : {
'contains' : 'buyi'
}
})
我们的代码是使用 find 方法查找 name字段中包含 buyi 关键词的数据.
类似 sql 语句中的 like 语法
字段在某个范围内选择
models.user.find({
name : ['yijiebuyi', '一介布衣']
});
在user models 中查找 name='yijibuyi' 或者 name='一介布衣' 注意他们是"或" 的关系
类似 sql 中的
select * from user where name='yijiebuyi' or name='一介布衣';
或者
select * from user where name in ("yijiebuyi","一介布衣");
字段不在某个范围内选择
models.user.find({
name: { '!' : ['一介', '布衣'] }
});
在 user models 中查找 name 不等于 '一介' 或者 不等于 '布衣' 的用户
类似 sql 中的
select * from user where name!='一介' or name!='布衣';
或者
select * from user where name not in ("一介","布衣");
多个字段查询,其中一个满足条件即可
models.use.find({
or : [
{ name: '一介布衣' },
{ age: 30 }
]
})
在上面的find 查询中,我们上面加入了2个判断条件,其中是 或 的关系,满足其中一个即可.
find 修饰符查询
>' 大于 ,
<小于 ,
>=大于等于 ,
<=小于等于 ,
!` 不等于
find 查询中直接在某个查询字段上加上修饰符
年龄小于 30 岁的用户
models.user.find({age,{'<':30}});
年龄不等于 15 岁的用户
models.user.find({age:{'!':15}});
like 修饰符
使用语法:
models.user.find({name:{'like':'%布衣%'}});
user 中查询 name 中包含 '布衣' 关键词的用户
从 like 语法中衍生出来2种匹配方式 ,从头匹配 或者 从尾匹配
从头匹配
models.user.find({name:{'like':'布衣%'}});
还有一个专门指定从头匹配的修饰符 'startsWith'
models.user.find({name:{'startsWith':'一介'}});
从尾匹配
models.user.find({name:{'like':'%一介'}});
当然也有一个专门从尾匹配的修饰符 'endsWith'
models.user.find({name:{'endsWith':'一介'}});
多个修饰符 同时使用
常见的比如 选择一个日期范围 ,从 2016-09-02 到 2017-02-15
下面我们同时使用 <
和 >
2个符号
models.user.find({data:{'>':new Date('2/9/2016'),'<':new Date('15/2/2017')}});
多个条件放在一个修饰符选择器中