一、废话
从13年1月份接触mongodb进行开发,开发了旅游标签服务、微博标签检索系统、地图服务、web APP服务...使用MongoDB的场景从.NET、JAVA环境转到了node.js平台。越发觉Node.js和mongodb结合感觉的很好。感觉mongodb和node.js是天生的一对。的确,mongodb的客户端是JS的解析引擎。因此,选择mongodb和node.js做产品原型也是很nice的选择。网上,遇到网友询问mongodb的开发,选择哪个driver最好,以前一直是使用原生的driver,但是写起来代码有很多需要注意的,比如连接的关闭操作等等...因此,在node.js开发环境下我这里推荐使用mongoskin。
二、几个需要说的概念
(1)数据库:同关系数据库一样。
(2)集合: 关系数据库中的表。
(3)文档: 类比关系数据库的记录,实则是JSON对象。
(4)数据库设计:建议考虑NoSQL设计,抛弃关系数据的设计思想;其实NoSQL数据库设计博大精深,需要不断地在项目中实践。
(5)用户体系:每一个数据库都有自己的管理员,可以:
复制代码 代码如下:
use dbname; db.addUser('root_1' , 'test');
(7)建议更改对外端口
(8)启动服务(这是win下,linux下稍作修改):
复制代码 代码如下:
mongod --dbpath "XX\MongoDB\data\db" --logpath "XX\MongoDB\log\mongo.log" --logappend -auth --port 7868
三、搭建mongodb开发基础设施
(0) npm install mongoskin 安装mongoskin
这里不介绍Node.js安装、package等机制。
(1)创建配置文件 config.json
复制代码 代码如下:
{
"dbname":"TEST",
"port": "7868",
"host": "127.0.0.1",
"username": "test",
"password": "test"
}
(2)创建util相关类mongo.js :导出一个DB对象
复制代码 代码如下:
var mongoskin = require('mongoskin'),
config = require('./../config.json');
/*
* @des:导出数据库连接模块
* */
module.exports = (function(){
var host = config.host,
port = config.port,
dbName = config.dbname,
userName = config.username,
password = config.password,
str = 'mongodb://' + userName + ':' + password + '@' + host +':' + port+ '/' + dbName;
var option = {
native_parser: true
};
return mongoskin.db(str, option);
})();
(3)构建CRUD的基础类:为了减少重复CURD代码,只需要传入相关的JSON对象即可
复制代码 代码如下:
var db = require('./mongo.js'),
status = require('./status'),
mongoskin = require('mongoskin');
var CRUD = function(collection){
this.collection = collection;
db.bind(this.collection);
};
CRUD.prototype = {
/*
* @des: 创建一条记录
* @model: 插入的记录,JSON格式的model
* @callback:回调,返回插入成功的记录或者失败信息
*
* */
create: function(model, callback){
db[this.collection].save(model, function(err, item){
if(err) {
return callback(status.fail);
}
item.status = status.success.status;
item.message = status.success.message;
return callback(item);
});
},
/*
* @des:读取一条记录
* @query:查询条件,Mongo查询的JSON字面量
* @callback:回调,返回符合要求的记录或者失败信息
*
* */
read: function(query, callback){
db[this.collection].find(query).toArray(function(err, items){
if(err){
return callback(status.fail);
}
var obj = {
status: status.success.status,
message: status.success.message,
items: items
};
return callback(obj);
});
},
/*
* @des:更新一条记录
* @query:查询条件,Mongo查询的JSON字面量,此处为_id
* @updateModel:需要更新的JSON格式的模型
* @callback:返回成功或者失败信息
*
* */
update: function(query, updateModel, callback){
var set = {set: updateModel};
db[this.collection].update(query, set, function(err){
if(err){
return callback(status.fail);
}else{
return callback(status.success);
}
});
},
/*
* @des:删除一条记录
* @query:查询条件,Mongo查询的JSON字面量
* @callback:返回失败或者成功的信息
*
* */
deleteData: function(query, callback){
db[this.collection].remove(query, function(err){
if(err){
return callback(status.fail);
}
return callback(status.success);
});
}
};
module.exports = CRUD;
(4)构建status.json,因为需要一些状态表示成功和失败,后期可以拓展为验证码错误、短信验证错误、用户名错误等
复制代码 代码如下:
module.exports = {
/*
* 成功状态
*
* */
success: {
status: 1,
message: 'OK'
},
/*
* 失败状态
*
* */
fail: {
status: 0,
message: 'FAIL'
},
/*
* 两次输入的密码不一致
* */
repeatPassword: {
status: 0,
message: '两次输入的密码不一致'
}
};
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
- 群星《赤热 电视剧音乐原声》[320K/MP3][427.21MB]
- 周华健.1996-爱的光【滚石】【WAV+CUE】
- 杨宗宪.1996-想啥人怨啥人等啥人【有容唱片】【WAV+CUE】
- 郑秀文.2024-Best.Concert.Live【华纳】【FLAC分轨】
- 《Pax Dei》配置要求一览
- 《过山车之心2》存档位置介绍
- 《三国志8 REMAKE》评测:自定义的三国演义
- 群星《少年白马醉春风 网剧OST原声专辑》[320K/MP3][117.05MB]
- 群星《少年白马醉春风 网剧OST原声专辑》[FLAC/分轨][621.04MB]
- 《魏佳艺5CD合集》[WAV分轨][3.8G]
- CSGO职业选手donk怎么样 2024最新donk个人资料介绍
- CSGO职业选手NiKo怎么样 2024最新Niko个人资料介绍
- 剑网3丝路风语PVE焚影怎么打 丝路风语PVE焚影圣诀手法配装攻略
- [老虎魚古典名盘]心碎SACD浪漫小提琴之声[DSF]
- Queen(皇后乐队)《GreatestHitsII》[SACD-DSF]