將json當資料庫一樣操作的javascript lib_javascript技巧

來源:互聯網
上載者:User

前段時間工作中用到Json資料,希望將一些簡單的增刪改查放到用戶端來做,這樣也能減少伺服器端的壓力。分別尋找了幾個可以對Json進行操作的javascript 類庫,最終選定了TAFFY DB。原因如下:
1、使用的是BSD開源協議,不用擔心商業使用限制。
2、一直在有人進行更新,並且不和其他架構(如Jquery,YUI,Dojo等)衝突
3、功能齊全——增刪改查、排序等等都有了。
4、小巧,壓縮後只有17k大小。
所以,工作完後,將這篇文章寫出來,並推薦這個類庫給大家,希望能夠協助到那些正在尋找Json 查詢修改的Coder們一些幫主,並和大家一起交流學習。

TAFFY DB 基本資料
項目首頁:http://taffydb.com/
託管地址:https://github.com/typicaljoe/taffydb

使用方法:

複製代碼 代碼如下:

<script type="text/javascript" charset="utf-8" src="taffy-min.js"></script>

複製代碼 代碼如下:

// 建立空白資料庫
var db = TAFFY();
//建立包含一條資料的資料庫
var db = TAFFY({record:1,text:"example"})
 //通過數組建立資料庫,數組的元素為json格式的object(可多條)
var db = TAFFY([{record:1,text:"example"}])     
// 通過json格式字串建立資料(可多條)   
var db = TAFFY('[{"record":1,"text":"example"}]')

查詢資料:
首先構建一個資料庫,以後的樣本,都以這個資料庫為準。
複製代碼 代碼如下:

var db = TAFFY([//構建一個城市的資料庫,欄位分別代表 省份、城市名、郵遞區號、排序
    { province:"北京", cityName:"北京", zipCode:"10001", orderNum:1},
    { province:"河北", cityName:"石家莊", zipCode:"10002", orderNum:2},
    { province:"河北", cityName:"保定", zipCode:"10003", orderNum:3},
    { province:"河北", cityName:"承德", zipCode:"10004", orderNum:4},
]);

1、根據欄位值進行查詢
複製代碼 代碼如下:

var cities = db({province:"河北"});  //查詢所有province 值為"河北"的資料,並返回TAFFY格式的object
//console.log這個函數,只要在有控制台的瀏覽器中,都可以用,比如Firefox的firebug,還有Google瀏覽器的開發人員工具(按F12可呼出)
for(var i = 0; i< cities().count(); i++){
    //get()這個TAFFY的函數,可以將TAFFY的object資料轉化為json格式
    console.log("城市名", cities().get()[i].cityName);
}
console.log("第一條資料為:", cities().first()); // first()這個函數可以返回json格式的第一條資料

2、根據條件查詢 (具體條件請查閱 http://www.taffydb.com/writingqueries 的“Comparison Operators”小節

複製代碼 代碼如下:

//單條件查詢
//查詢 排序大於 2 的所有資料
db({ orderNum:{'>':2}});
//範圍查詢
//查詢排序大於2 並且 小於 4 的所有資料
db({ orderNum:{'>':2, '<':4}});
//多條件"與" 查詢
//查詢大於2,並且 小於4 ,並且 省份為 河北省 的資料
db({ orderNum:{'>':2, '<':4}, province:"河北"});
//多條件"或"查詢
// 查詢 排序  大於2 或者 小於 4 的資料
db({ orderNum:{'>':2}}, { orderNum : {'<':4}});
//指定資料內查詢(where in)
// 查詢 城市為  保定、石家莊 的資料
db({ cityName:['保定','石家莊']});

3、排序

複製代碼 代碼如下:

//單條件排序
db().order("orderNum desc");    // 根據orderNum 倒序
db().order("orderNum"); //正序
//多欄位排序
db().order("orderNum desc, zipCode asc"); //先按照orderNum倒序,然後按照 zipCode正序

4、計算

複製代碼 代碼如下:

//求最大值
db().max("orderNum"); //得到orderNum的最大值,並返回
//求最小值
db().min("orderNum"); //得到最小的 orderNum
//求和
db().sum("orderNum"); //得到所有orderNum的和
//得到第一條資料
db().first();  //取第一條資料,並返回json格式
//得到最後一條資料
db().last(); //取最後一條,並返回json格式
//這個可以用來分頁 哈哈
db().start(15).limit(20); //從第15條資料開始,往後取20條

5、內建函數查詢,有些資料,需要在查詢的時候,就做一些計算,稍顯複雜,可以通過內建函數來查詢

複製代碼 代碼如下:

db().filter(function(){
    return this.cityName.length > 2;
});

添加資料

複製代碼 代碼如下:

//添加一條資料
db.insert({province:"湖南", cityName:"長沙", zipCode:"10005", orderNum:5});

刪除資料

複製代碼 代碼如下:

//刪除全部資料
db().remove();
//刪除所有orderNum 大於5的資料
db({orderNum:{'>':5}}).remove();

修改資料

複製代碼 代碼如下:

//將所有資料 的 orderNum修改為1
db().update({orderNum:1});

//將城市名為北京的 郵遞區號修改為 100000
db({cityName:"北京"}).update({zipCode:"100000"})

//將所有的orderNum 都加1
db().update(function(){
    this.orderNum = this.orderNum + 1;
    return this;
});
/*
特別說明:在有的時候,增刪查都沒有問題,唯獨修改的時候,會碰到報錯:找不到欄位
這應該是TAFFY的一個小bug,遇到這個情況,重新初始化一下就好,需要用到一個函數
stringify(),這個是將TAFFY DB 的所有資料,變成字串,所以遇到這種情況,就可以這樣做了:
*/
db = TAFFY(db().stringify()); //將內容重新初始化
db().update({column:value});

寫到這裡,我想這個簡單的教程也就算是可以了,已經方便小菜們快速上手這個類庫了。
當然,其中還有很多是我沒有去提及,需要自己去查詢的,比如模糊查詢等等,更加複雜的操作。大家可以去項目的官方首頁去看。(英文)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.