Node.js與Sails~中間查詢語言Waterline
上講主要說了如何配置sails的持久化機制,這講(jiang)主要說一下實現持久化時的增刪改查的語(yu)法(fa),在sails里使(shi)用(yong)了和(he)mongodb風格類似(si)的waterline查詢語(yu)言,使(shi)用(yong)簡單(dan),語(yu)法(fa)生動,下面我們主要介紹一下find,findOne,Update,Create,Destory等。
find,查(cha)詢并返回結(jie)果集
Model.find({ name: 'foo' })
上(shang)面查(cha)詢name等于foo的集合,如(ru)果希望(wang)返回分頁結果,可以(yi)使(shi)用(yong)limit和skip參數,如(ru)下
Model.find({ where: { name: 'foo' }, skip: 20, limit: 10 });
如果希望在結果中進行序列(lie),使用sort參數
Model.find({ where: { name: 'foo' }, skip: 20, limit: 10, sort: 'name DESC' });
下(xia)面(mian)是包含的(de)實現,類似于C#的(de),contaions,表示包含某(mou)些字符的(de)結(jie)果(guo)集
Model.find({ name : { 'contains' : 'zzl' } })
如果希(xi)望(wang)實現數(shu)據庫的枚舉查詢,即in方式(shi),可以這樣(yang)進行
Model.find({ name : ['Walter', 'Skyler'] });
類(lei)似的,not in操(cao)作代碼(ma)如下
Model.find({ name: { '!' : ['zzl', 'zql'] } });
當進行數據比較時,可以使用>,<,<=,>=等(deng)操作(zuo)符
Model.find({ age: { '>=': 21 }})
Waterline查(cha)詢語言非(fei)常強大,幾乎將(jiang)所有查(cha)詢語言的優點都(dou)收錄(lu)了,下(xia)面還有startsWith和endsWith,這類(lei)似于C#里的方(fang)法,“以某些字(zi)段開頭或者結束(shu)”
Model.find({ city: { 'endsWith': 'china' }})
除了有面向對象的方法外,還有SQL的,如like方法,實現(xian)了模(mo)糊查詢
Model.find({ city: { 'like': '%c%' }})
最后再一下(xia)范圍查詢(xun),它實際上(shang)是將多個方法組合在(zai)一起使用(yong),下(xia)面(mian)是查詢(xun)在(zai)2015-10-1到2015-10-30號的數據
Model.find({ date: { '>': new Date('10/1/2015'), '<': new Date('10/30/2015') } })
而相對于查詢來說,添(tian)加,更(geng)新和刪(shan)除就簡(jian)單多了(le),下面代(dai)碼(ma)是對Person表進行(xing)的操作(zuo)
添加
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); }) }