教程——MongoDB

一、概念

mongodb就是非关系型数据库,而非关系型数据库是不能通过横向纵向去定位一条数据,它的结构更像是一个数组里放了很多个json数据。


二、设置

(1)设置数据文件和日志文件储存位置

按自己的爱好设置文件的储存位置,本安装文档的储存位置设置在E盘,目录如下

E:\MongoData

├─data   #MongoDB数据库中的数据的储存位置

└─log    #MongoDB数据库中的日志的储存位置

    └─mongodb.log   # MongoDB数据库中的日志的储存文件   (创建方式:创建一个txt,把后缀名改为log)

(2)配置mongodb服务

  • 设置mongodb的环境变量

    计算机>右键>属性>高级系统设置>环境变量>找到系统变量中的path变量

 

    向path变量的结尾处添加mongodb的安装目录下bin目录的地址(如果原来的path路径后面没有分号,需要添加一个英文的分号再添加mongodb的目录)

    如果按本文档安装的mongodb安装目录下bin目录为:

    C:\Program Files\MongoDB\Server\3.4\bin

 设置完成后依次点击确定,就设置好了mongodb的环境变量了

 

  • 安装mongodb服务

    第一步:按照设置的储存位置,修改下面的命令

    (ps:如果是按本文档设置的储存位置,不用在做更改)

mongod --logpath "E:\MongoData\log\mongodb.log" --logappend --dbpath "E:\MongoData\data" --directoryperdb --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install

#命令中字段的说明

***  --logpath   指定MongoDB日志文件的存储路径,注意是指定文件不是目录

***  --logappend  使用追加的方式写日志

***  --dbpath   指定数据库数据的存储路径

***  --directoryperdb  每个DB都会新建一个目录

***   --serviceName   指定服务名称

***  --serviceDisplayName  指定服务名称,有多个mongodb服务时执行。

***  --install  指定作为一个Windows服务安装。

    第二步:在开始处用管理员身份打开cmd命令行,输入上面第一步修改好的指令回车ps:一定要以管理员身份运行),(运行完成没有任何错误提示,表示设置成功)

三、基本操作:

  • net start MongoDB
  • net stop MongoDB
  • mongo :进入mongodb的命令状态
  • show dbs :显示当前的数据库
  • show collections:显示当前的数据库拥有的表
  • use 数据名 :切换数据库 或 创建新的数据库
  • db.createCollection("表名字")  :向数据库里面添加表
  • db.表名.drop()  :用来从数据库中删除一个表
  • db.dropDatabase() :删除当前正在使用的数据库
  • db.表名.insert({...}) :插入数据
  • db.表名.find() :查看数据

         $lt  小于     <

         $gt  大于     >

         $gte 大于等于  >=

         $lte 小于等于  <=

              如:

              db.t1.find({age:{$lt:5}})   就可以查找age小于5的全部数据

              db.t1.find({age:{$lt:5,$gt:1}})   就可以查找age小于5大于1 的全部数据     (多个筛选条件之间使用逗号分隔    )

  • db.表名.update(  {修改的条件}  ,  {修改器:{修改内容}}  ,  第三个参数 , 第四个参数 )

   修改器:  $set 修改    $unset删除字段  $inc 当于编程语言中的 “+=

   第三个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

   第四个参数 ,默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

  • db.表名.remove({条件})
  • Mongo中支持使用 js代码,包括申明变量、循环等等

  • 导出:mongoexport可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。

      语法:
          mongoexport -d dbname -c collectionname -o file --type json/csv -f field
          参数说明:
            -d :数据库名
            -c :collection名
            -o :输出的文件名file
            --type : 输出的格式,默认为json
            -f :输出的字段,如果-type为csv,则需要加上-f "字段名"fileld
       示例:
          mongoexport -d mongotest -c users -o D:/users.json --type json -f  "_id,user_id,user_name,age,status"

  • 导入:
      语法:
          mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
          参数说明:
            -d :数据库名
            -c :collection名
            --file :要导入的文件
            --type :导入的格式默认json
            -f :导入的字段名
            --headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
            
 
      示例:
          mongoimport -d mongotest -c users --file D:/users.json --type json

四、node.js操作mongodb

先创建一个项目文件夹,然后再该位置命令行进行初始化:npm init

然后安装控制模块:

npm install mongodb@2.2.33 --save

在demo1.js写入增删查改代码,可以逐个注释进行测试

var mongo = require("mongodb"); //引入mongodb模块
var assert = require("assert"); //引入断言模块

var MongoClient = mongo.MongoClient;  //开启服务

var Urls = "mongodb://localhost:27017/demo1";  //url储存  放在连接池中。

MongoClient.connect(Urls,function(err,db){  //获取连接
    assert.equal(null,err);  //使用断言模块代替以前的 if判断
    
/**
    //插入数据
    db.collection("t1").insert({"name":"xiaoming"},function(err,result){ //连接到数据库上面,并使用参数传入集合
        assert.equal(null,err);
        console.log(result);
        db.close();
    });
	
	//查找数据
	db.collection("t1").find({"name":"xiaoming"}).toArray(function(err,result){
		assert.equal(null,err);
		console.log(result);
		db.close();
	})

	//删除数据
    db.collection("t1").deleteOne({"name":"xiaoming"},function(err,result){ //连接到数据库上面,并使用参数传入集合
        assert.equal(null,err);
        console.log(result);
        db.close();
    });
**/	
	 //修改数据
    db.collection("t1").update({"name":"zhang"},{$set:{"name":"xiaoming"}},function(err,result){ //连接到数据库上面,并使用参数传入集合
        assert.equal(null,err);
        console.log(result);
        db.close();
    });

});

操作方法的封装:dbhandler.js

var mongo=require("mongodb");//@2.2.11
var MongoClient = mongo.MongoClient;
var assert = require('assert');
var host="localhost";
var port="27017";
var Urls = 'mongodb://localhost:27017/demo2';//demo2是自己的数据库名


//add一条数据
var add = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  collection.insertMany([selector],function(err,result){
    assert.equal(err,null);
    fn(result);//错误处理函数
    db.close();
  });
}
//delete
var deletes = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  collection.deleteOne(selector,function(err,result){
    try{assert.equal(err,null)}catch(e){
      console.log(e);
    }
    fn(result);
    db.close();
  });

};
//find
var find = function(db,collections,selector,fn){
  var collection = db.collection(collections);

    collection.find(selector).toArray(function(err,docs){

      try{
        assert.equal(err,null);
      }catch(e){
        console.log(e);
        docs = [];
      }

      fn(docs);
      db.close();
    });

}

//update
var updates = function(db,collections,selector,fn){
  var collection = db.collection(collections);
  console.log(selector);
  collection.updateOne(selector[0],selector[1],function(err,result){
    assert.equal(err,null);
    assert.equal(1,result.result.n);
    fn(result);
    db.close();
  });

}

//(权限控制) -- 暂时没有用
MongoClient.connect(Urls, function(err, db) {
  find(db,"powers",null,function(d){
    console.log("123s");
    console.log(d.length);
  });
});

//方法都赋值到操作对象上,便于调用
var methodType = {
  login:find,
  show:find,
  add:add,
  getpower:find,
  update:updates,
  delete:deletes,
  updatepass:updates,
  adduser:add,
  usershow:find,
  getcategory:find,
  getcourse:find,
  find:find,
  state:find,
  top:find,
  AddDirectory:find,
  updateDirectory:updates,
  deleteDirectory:deletes,
  showlist:find,
  showdir:find
};
//主逻辑
module.exports = function(req,res,collections,selector,fn){
  MongoClient.connect(Urls, function(err, db) {
    assert.equal(null, err);
    console.log("Connected correctly to server");
    methodType[req.query.action](db,collections,selector,fn);
    db.close();
  });

};
五、记录一个node的自动重启模块

  • npm install supervisor -g
  • supervisor demo.js
  • 改变下demo.js中输出的代码,将 response.end("haha") 中输出的内容该变,比如改为  response.end("hehe  hehe  hehe"),然后直接刷新页面,就可以看到修改的结果被输出了(以前我们需要重新运行 node demo.js才可以)

  • 最好只对创建了http服务的node文件才用supervisor运行,如果一般的文件这样运行,会不断的重启,很耗费内存。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值