MongoDB的并行(mongodb/node-mongodb-native)、MongoDB入门

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

图片 1

安装成功!

 

最后两步非必不可少;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

图片 2库操作

新建数据库:第一步:use
新建数据库名;第二步:进行此库相关的操作;要是不进行第二步,该数据库不会被创设

查阅数据库:show dbs;

新建表:db.createCollection(‘要新建的表名’);

查阅当前数据库下表: show collections;

剔除当前数据库指定表:db.表名.drop();

除去当前数据库:db.dropDatabase();

 

以身作则操作如下图:

图片 3

1.默许为存在“admin”和“local”多少个数据库;admin数据库是存放在管理员音信的数据库,认证会用到;local是存放replication相关的数额;那两处本篇都不曾关系到;

2.find();是个查询操作,前边会讲到,上边用到关键是为着演示use不存在的库后,举行连锁操作会创设出这些库;

3.MongoDB从未像MySQL或MSSQL等数据库这么严峻的确定,不是非得要先建库、建表、建种种字段,将来的操作中逐步的会体会到^_^!

 

图片 4插入

方法一:db.表名.insert(数据);

图片 5

1.从上图操作可以见见,没有去创立“tb1”表,其实通过插入操作也会活动创建

2._id,是mongodb自已生成的,每行数据都会设有,暗许是ObjectId,可以在插入数据时插入那么些键的值(援救mongodb帮助的享有数据类型)

方法二:db.表名.save(数据);

图片 6 

1.从上图操作可以看出,save也可直达insert一样的插入效果

2._id能够自已插入

3.一个表中不肯定要字段都如出一辙

 

那它们有怎么着界别?

图片 7

从图中操作就能够看来,即便insert和save方法都足以插入数据,当默许的“_id”值已存在时,调用insert方法插入会报错;而save方法不会,会更新相同的_id所在行数据的消息

 

图片 8查询

查询表中拥有数据:db.表名.find();

按标准查询(支持多规格):db.表名.find(条件); 

询问第一条(辅助标准化):db.表名.findOne(条件);

范围数量:db.表名.find().limit(数量);

跳过指定数量:db.表名.find().skip(数量);

图片 9

从上图中可以观望具体用法,批量安顿暗中认同数据我用了一个javascript语法循环;

 

正如查询

大于:$gt

小于:$lt

高于等于:$gte

稍差于等于:$lte

非等于:$ne

图片 10

上面看到了AND的关联,或者的关联应该怎么用?

或者:$or

图片 11

 

in和not in查询(包含、不包含)

$in

$nin

图片 12 

 

询问数量:db.表名.find().count();

排序:db.表名.find().sort({“字段名”:1}); 

1:表示升序  -1:表示降序

点名字段重返: db.表名.find({},{“字段名”:0});

1:返回  0:不返回

图片 13

 

查询就讲到那里了,感觉查询示例一下讲不完,还有些高级查询,大家自行去询问一下吧^_^!

 

图片 14修改

前面save在_id字段已存在是就是修改操作,按指定条件修改语法如下

db.表名.update({“条件字段名”:”字段值”},{$set:{“要修改的字段名”:”修改后的字段值”}});

图片 15

 

图片 16删除

db.表名.remove(条件);

图片 17

 

图片 18积存过程

   创造存储进程:

db.system.js.save({_id:"存储过程ID", 
value:function(参数){ -- 逻辑主体;  return 返回; 
}}); 

调用存储进度

db.eval("存储过程ID()");

图片 19

具备存储进度都存放在db.system.js中

 

MongoDB基本操作就讲这么多了,基本够用,长远学习我们自已去探访API^_^!

 

nodejs操作MongoDB

先用npm安装mongodb

npm install mongodb

安装成功后,继续在上头操作成立的库和表中操作

 

图片 20插入

图片 21

图片 22

图片 23

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();
    });
});

图片 24

图片 25查询

 图片 26

图片 27

图片 28

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();
  });
});

图片 29

图片 30修改

图片 31

图片 32

图片 33

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();
    });
});

图片 34

图片 35删除

图片 36

图片 37

图片 38

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();
  });
});

图片 39

图片 40调用存储进程

图片 41

图片 42

图片 43

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();
    });
});

图片 44

 

到此CRUD操作就完了,通过回调函数的result参数进行判定都得以拓展作业逻辑的更是结合!

写在之后…

本篇针对node-mongodb-native操作MongoDB没有做更深的讲解,原因是指向它的拓展重复卷入的东西很多,且更便宜编程落成,比如:mongoosemongoskinmongolian等等,应用性不错;

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″})
并不是用的同一字段做的准绳;

网站地图xml地图