MongoDB
开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序;高伸缩性;
NoSQL毕竟还地处发展阶段,也发说其的各种题材之:http://coolshell.cn/articles/5826.html
官网地址:http://www.mongodb.org/
API Docs:http://docs.mongodb.org/manual/
node-mongodb-native
mongodb的nodejs驱动;
GitHub地址:https://github.com/mongodb/node-mongodb-native
MongoDB安装(windows)
合法安装说明: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/
准法定说明当win7
64个环境下安排或者撞了问题,我要将自设置配备的过程写一下
下载MongoDB并安装
下载地址:http://www.mongodb.org/downloads
始建数据库和日志存放目录
以C盘根目录下新建“M_DB”和“M_LOG”两个文本夹,分别寄存数据库文件和日志文件
创造一个config文件
开辟目录“C:\Program Files\MongoDB 2.6
Standard\bin”,并以是目录下新建一个mongo.config文件,文件内容如下
##数据库目录
dbpath=C:\M_DB
##日志输出文件
logpath=C:\M_LOG\mongodb.log
丰富环境变量
当环境变量PATH中进入“C:\Program Files\MongoDB 2.6 Standard\bin“
以Windows服务器运行MongoDB
盖管理人方式打开CMD窗口,运行如下命令安装MongoDB服务,可以以
“控制面板\不无控制面板项\管理工具\劳动”找到名为也“MongoDB”的服务右键启动
mongod --config "C:\Program Files\MongoDB 2.6 Standard\bin\mongo.config" --install
开行服务
于CMD窗口被运行如下命令,也得以于可于
“控制面板\负有控制面板项\管理工具\服务”
net start mongodb
测试连接
在CMD中运行如下命令,查看结果
mongo
设置成功!
末两步非必不可少;MongoDB默认端口是27017,可以修改!
对于“C:\Program Files\MongoDB 2.6
Standard\bin”目录下的exe程序,做个大概的验证,可能更方便了解得举行来什么操作,基础学习关注mongod.exe和mongo.exe即可
mongo.exe:客户端,支持js语法
mongod.exe:服务端
mongodump.exe:备份工具
mongorestore.exe:恢复工具
mongoexport.exe:导出工具
mongoimport.exe:导入工具
mongostat.exe:实时性能监控工具
mongotop.exe:跟踪MongDB实例读写时间工具
重复多详细解释或者操作可以查:http://docs.mongodb.org/manual/reference/program/
MongoDB基本语法和操作入门(mongo.exe客户端操作)
MongoDB已经设置好,下面先对MongoDB进行一个简易的入门,再就此node-mongodb-native去操作MongoDB
库操作
新建数据库:第一步:use
新建数据库名;第二步:进行此库相关的操作;如果不进行第二步,该数据库不会见于创造
翻开数据库:show dbs;
新建表:db.createCollection(‘要新建的表名’);
查阅时数据库下表: show collections;
剔除时数据库指定表:db.表名.drop();
去除时数据库:db.dropDatabase();
以身作则操作而下图:
1.默看存在“admin”和“local”两单数据库;admin数据库是存放管理员信息的数据库,认证会为此到;local是存放在replication相关的数码;这半远在本篇都不曾涉及到;
2.find();是个查询操作,后面会称到,上面用到第一是为演示use不存在的库后,进行相关操作会创建有这库房;
3.MongoDB尚未如MySQL或MSSQL等数据库这么严格的规定,不是不得如先期建库、建表、建各种字段,以后的操作中渐渐的见面体会至^_^!
插入
方法一:db.表名.insert(数据);
1.由上图操作可以看出,没有失去创造“tb1”表,其实通过插入操作也会自行创建
2._id,是mongodb自曾成形的,每行数据还见面存在,默认是ObjectId,可以于插入数据经常插入这个键的价(支持mongodb支持之兼具数据类型)
方法二:db.表名.save(数据);
1.从上图操作可以看出,save也可是达成insert一样的插效果
2._id可以由曾插入
3.一个表中不自然要是字段都一律
这就是说她来啊界别?
自从图中操作就可以看出,虽然insert和save方法都足以插数据,当默认的“_id”值就在时时,调用insert方法插入会报错;而save方法不见面,会更新相同的_id所在行数据的音讯
查询
查询表中持有数据:db.表名.find();
本标准查询(支持多规格):db.表名.find(条件);
查询第一长(支持标准):db.表名.findOne(条件);
范围数量:db.表名.find().limit(数量);
跳过指定数量:db.表名.find().skip(数量);
自从上图被好看看具体用法,批量栽默认数据本身用了一个javascript语法循环;
比较查询
大于:$gt
小于:$lt
不止等于:$gte
仅次于等于:$lte
非等于:$ne
面看到了AND的涉及,或者的涉及应该怎么用?
或者:$or
in和not in查询(包含、不包含)
$in
$nin
询问数量:db.表名.find().count();
排序:db.表名.find().sort({“字段名”:1});
1:表示升序 -1:表示降序
点名字段返回: db.表名.find({},{“字段名”:0});
1:返回 0:不返回
询问就开口到这边了,感觉查询示例一下云不结,还生头高级查询,大家自行去打听一下吧^_^!
修改
前面save在_id字段已存在是不怕是改操作,按指定条件修改语法如下
db.表名.update({“条件字段名”:”字段值”},{$set:{“要修改的许段名”:”修改后底配段值”}});
删除
db.表名.remove(条件);
存储过程
创建存储过程:
db.system.js.save({_id:"存储过程ID",
value:function(参数){ -- 逻辑主体; return 返回;
}});
调用存储过程
db.eval("存储过程ID()");
有存储过程还存放于db.system.js中
MongoDB基本操作就摆这么多矣,基本够,深入学大家从曾错过探视API^_^!
nodejs操作MongoDB
先用npm安装mongodb
npm install mongodb
设置成功后,继续当面操作创建的库房与表中操作
插入
var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var insertData = function(db, callback) { //连接到表 var collection = db.collection('tb2'); //插入数据 var data = [{"name":'wilson001',"age":21},{"name":'wilson002',"age":22}];
collection.insert(data, function(err, result) { if(err)
{
console.log('Error:'+ err); return;
}
callback(result);
});
}
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
insertData(db, function(result) {
console.log(result);
db.close();
});
});
查询
var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var selectData = function(db, callback) { //连接到表 var collection = db.collection('tb2'); //查询数据 var whereStr = {"name":'wilson001'};
collection.find(whereStr).toArray(function(err, result) { if(err)
{
console.log('Error:'+ err); return;
}
callback(result);
});
}
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
selectData(db, function(result) {
console.log(result);
db.close();
});
});
修改
var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var updateData = function(db, callback) { //连接到表 var collection = db.collection('tb2'); //更新数据 var whereStr = {"name":'wilson001'}; var updateStr = {$set: { "age" : 100 }};
collection.update(whereStr,updateStr, function(err, result) { if(err)
{
console.log('Error:'+ err); return;
}
callback(result);
});
}
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
updateData(db, function(result) {
console.log(result);
db.close();
});
});
删除
var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var delData = function(db, callback) { //连接到表 var collection = db.collection('tb2'); //删除数据 var whereStr = {"name":'wilson001'};
collection.remove(whereStr, function(err, result) { if(err)
{
console.log('Error:'+ err); return;
}
callback(result);
});
}
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
delData(db, function(result) {
console.log(result);
db.close();
});
});
调用存储过程
var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var invokeProcData = function(db, callback) { //存储过程调用 db.eval('get_tb2_count()', function(err, result) { if(err)
{
console.log('Error:'+ err); return;
}
callback(result);
});
}
MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("连接成功!");
invokeProcData(db, function(result) {
console.log(result);
db.close();
});
});
至这CRUD操作就得,通过回调函数的result参数进行判断还得拓展工作逻辑的尤为做!
写于之后…
本篇针对node-mongodb-native操作MongoDB没有开还怪的讲授,原因是对她的开展再次卷入的事物多,且再度便利编程实现,比如:mongoose、mongoskin、mongolian等等,应用性不错;
mongoose的或许因此的比较多…
本文中广大地方我都或习惯的用表、行等术语去讲述,其实针对NoSQL来说并无对准,只是推进习惯了关系项目数据库的开发人员来解;
章中“表”本应当描述为“collection(集合)”;“行”应该描述为“文档(document)”,一个database中好产生多单collection,一个collection中而且足以生出差不多只document
章中并无涉嫌认证的有些,大家自行去上一下,非常简单,我文中也深到了有限独默认数据库中之“admin”数据库
用CMD中以mongo.exe操作时,插入中文遇一了问题,原因是MongoDB默认编辑是utf-8,而CMD是GBK,所以在CMD窗口中执这令修改编辑即可:chcp 65001
留意mongodb严格区别轻重缓急写,比如查询 db.tb2.find({“name”:”wilson0″})和 db.tb2.find({“Name”:”wilson0″})
并无是因此底同一字段做的原则;