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數據