第5章-MongoDB、Mongoskin特性-5.5.Mongoskin的主要方法介紹

Mongoskin比MongoDB的原生驅動提供更好的API。像之前那樣,在NPM上安裝一個模塊

$npm install mongoskin@0.6.1

和數據庫的連接

var mongoskin = require('mongoskin'),
  dbHost = '127.0.0.1',
  dbPort = 27017;

var db = mongoskin.db(dbHost + ':' + dbPort + '/local', {safe:true});

我們可以創建自己的數據集合的方法。這對於通過合併app邏輯到自定義方法中來實現MVC-like架構很有用:

db.bind('messages', {
  findOneAndAddText : function (text, fn) {
    db.collection('messages').findOne({}, function(error, item){
      if (error) {
        console.error(error);
        process.exit(1);
      }
      console.info("findOne: ", item);
      item.text = text;
      var id = item._id.toString(); // 可以把ID存成字符串
      console.info("before saving: ", item);
      db.collection('messages').save(item, function(error, count){
        console.info("save: ", count);
        return fn(count, id);
      });
    })
  }
});

最後,用最簡潔的方式(大概其他地方也會用到)調用自定義方法:

db.collection('messages').findOneAndAddText('hi', function(count, id){
    db.collection('messages').find({
      _id: db.collection('messages').id(id)
    }).toArray(function(error, items){
      console.info("find: ", items);
      db.close();
      process.exit(0);
    });
});

Mongoskin是MongoDB的Node.js版原生驅動的子集,因此後面所有的方法在前面都是可用的。
Mongoskin主要方法列表:
1.findItems(…, callback):查找元素並返回一個數組替代指針
2.findEach(…, callback):遍歷每個查找到的元素
3.findById(_id, …, callback):通過_id格式化字符串查找
4.updateById(_id, …, callback):更新匹配_id的元素
5.removeById(_id, …, callback):刪除匹配_id的元素

可供選擇的MongoDB原生驅動和Mongoskin包括如下內容:
1.mongoose:支持建模的可配置的異步JavaScript驅動
2.mongolia:輕量級的MongoDB ORM/驅動
3.monk:一個提供方便的極小的層,可用來使用Node.js編碼改善MongoDB

以下這些模塊常用來進行數據驗證。
1.mode-validator:驗證數據
2.express-validator:在Express.js 3/4中驗證數據

敏捷開發:
我們可以創建Bash種子數據腳本db/seed.sh使這步自動化:
seed.sh文件內容如下:

mongoimport --db blog --collection users --file ./db/users.json --jsonArray
mongoimport --db blog --collection articles --file ./db/articles.json --jsonArray

這個腳本利用了MongoDB的mongoimport特性,可以通過JSON文件直接將數據便捷地插入到數據庫。
users.json文件包含了授權用戶的信息:

[{
  "email": "[email protected]",
  "admin": true,
  "password": "1"
}]

articles.json文件保存了博客文章內容:

[{
  "title": "Node is a movement",
  "slug": "node-movement",
  "published": true,
  "text": "在一個隨機部署,它通常假定的散射傳感器的數目是超過所需的臨界傳感器密度。否則,該部署可能無法保證完整的區域覆蓋範圍,並可能存在一些覆蓋孔。除了使用更多的傳感器,以提高覆蓋率,移動傳感器節點可以用來改善網絡覆蓋。移動傳感器節點都配備了移動平臺,可以在初始部署前後移動。雖然移動傳感器節點通常比固定的同輩更昂貴的,它可以提供許多功能,提高網絡覆蓋率。節點運動策略的設計通常需要解決以下問題:在哪裏移動和如何有效地移動移動模式,使區域覆蓋可以優化?“在不同的網絡環境下,節點的運動的目標是不同的。在固定和移動傳感器節點組成的混合網絡中,目標是主要搬遷移動節點癒合的固定節點造成的覆蓋孔。在移動網絡中只包括移動節點,主要目標是最大限度地提高這些移動節點的覆蓋率,並在事件監測方案,一個重要的目標是派遣移動節點的事件的來源,更好的事件覆蓋。"  
}, {
  "title": "Express.js Experience",
  "slug": "express-experience",
  "published": false
  "text": "Work in progress",
},{
  "title": "Node.js FUNdamentals: A Concise Overview of The Main Concepts",
  "slug": "node-fundamentals",
  "published": true,
  "text": "Node.js是一個高效的、可擴展的非阻塞I/O的平臺,是建立在頂部的谷歌瀏覽器V8引擎和ECMAScript。這意味着,最前端的JavaScript(另一個實現ECMAScript)對象,函數和方法在Node.js是可用的。如果你需要在JS具體溫習基礎知識參考JavaScript基礎。"
  }]

在項目目錄下執行$ ./db/seed.sh,即可構建seed數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章