Node.js与Sails~中间查询语言Waterline

回到目录

上讲主要说了如何配置sails的持久化机制,这讲主要说一下实现持久化时的增删改查的语法,在sails里使用了和mongodb风格类似的waterline查询语言,使用简单,语法生动,下面我们主要介绍一下find,findOne,Update,Create,Destory等。

find,查询并返回结果集

Model.find({ name: 'foo' })

上面查询name等于foo的集合,如果希望返回分页结果,可以使用limit和skip参数,如下

Model.find({ where: { name: 'foo' }, skip: 20, limit: 10 });

如果希望在结果中进行序列,使用sort参数

Model.find({ where: { name: 'foo' }, skip: 20, limit: 10, sort: 'name DESC' });

下面是包含的实现,类似于C#的,contaions,表示包含某些字符的结果集

Model.find({  name : 
{
    'contains' : 'zzl'
  }
})

如果希望实现数据库的枚举查询,即in方式,可以这样进行

Model.find({
  name : ['Walter', 'Skyler']
});

类似的,not in操作代码如下

Model.find({
  name: { '!' : ['zzl', 'zql'] }
});

当进行数据比较时,可以使用>,<,<=,>=等操作符

Model.find({ age: { '>=': 21 }})

Waterline查询语言非常强大,几乎将所有查询语言的优点都收录了,下面还有startsWith和endsWith,这类似于C#里的方法,“以某些字段开头或者结束”

Model.find({ city: { 'endsWith': 'china' }})

除了有面向对象的方法外,还有SQL的,如like方法,实现了模糊查询

Model.find({ city: { 'like': '%c%' }})

最后再一下范围查询,它实际上是将多个方法组合在一起使用,下面是查询在2015-10-1到2015-10-30号的数据

Model.find({ date: { '>': new Date('10/1/2015'), '<': new Date('10/30/2015') } })

而相对于查询来说,添加,更新和删除就简单多了,下面代码是对Person表进行的操作

添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
addUser: function (param,cb) {
       var opt = param || { name: 'zzl' };
 
       Person.create(opt).exec(function (err, record) {
 
           console.log("添加")
           if (err) {
               cb('ERROR_DATABASE_EXCEPTION');//输出错误
           } else {
 
               cb(null, record);//正确返回
           }
       });
   }

 更新

复制代码
  modify:function(id,param,cb){
        var opt = param || { name: 'zzl' };
        Person.update({id:id},opt,function(err,record){
            console.log("修改")
            if (err) {
                cb('ERROR_DATABASE_EXCEPTION');//输出错误
            }else{

                cb(null, record);//正确返回
            }

        });
    }
复制代码

删除

  delete:function(id,cb){
        Person.destroy({id:id}).exec(function(err){
            console.log("删除,ID:"+id);
            cb(null);
        })

    }

回到目录

posted @   张占岭  阅读(5001)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2012-10-19 EF架构~一个规范,两个实现
2012-10-19 微软自己写的~测试远程数据库是否工作正常
2012-10-19 说说Entity Frameworks
点击右上角即可分享
微信分享提示