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": "374452668@qq.com",
"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数据