Node.js从白痴到入门(五):MongoDB

什么是MongoDB?

MongoDB是一个非关系型的数据库,它和我们之前比价属性的关系型数据库不一样,没有表和记录的概念,取而代之的是集合和对象。一个数据库包含多个集合,一个集合包含多个对象。每个对象的属性可以不同,也就是说同一个集合下一条记录包含属性a另一条记录包含属性b而没有属性a。MongoDB使用上比较随意,适合web以及物联网之类的散列数据存放,适合数据结构经常需要改变的情况,但不支持事务,不保证数据的完整性,换句话说数据并不是很可靠。MongoDB算是比较新的数据库了,据说性能很高,支持分布式存储,可以创建索引。
MongoDB并不能替代传统的关系型数据库(要求不高是可以的),典型的以空间换时间,会占用较多的磁盘空间,索引以及一些热数据会放在内存中,会占用很多内存空间,尽量不要和占内存服务放一起。
简单是说MongoDB是一个比较自由但不太靠谱(相对而言,稳定性还是有保障的)的数据库。

安装MongoDB

Windows下安装MongoDB

  • 首先到官网下载对应系统版本的安装包(一般装社区版就可以了)。
    软件的安装就不介绍了,和安装其它程序一样。安装之后需要将安装目录下的bin目录加入系统环境变量Path下面(方便使用命令)。如:

《Node.js从白痴到入门(五):MongoDB》 安装目录是D:\Program Files\MongoDB

  • 创建一个文件夹来存储数据库和log信息以及其它文件,如:
E:\workspace\MongoDB\log\
E:\workspace\MongoDB\db\
  • MongoDB的运行是基于服务的,所以我们先配置一下服务:
    新建一个mongod.cfg文件指定log和数据库存储位置:
systemLog:
    destination: file
    path: E:\workspace\MongoDB\log\mongod.log
storage:
    dbPath: E:\workspace\MongoDB\db
  • 安装服务:
> "mongod.exe绝对路径" --config mongod.cfg绝对路径 --install
如:
> "D:\Program Files\MongoDB\bin\mongod.exe" --config E:\workspace\MongoDB\mongod.cfg --install
//  "mongod.exe绝对路径" --config mongod.cfg绝对路径 --auth --install // 连接需要用户权限验证
  • 启动服务:
> net start MongoDB
// 使用net stop MongoDB可以停止服务

现在就可以打开安装目录下bin\mongo.exe开始使用MongoDB数据库了。
你也可以将这些命令创建一些批处理文件,方便以后使用:

《Node.js从白痴到入门(五):MongoDB》

Linux下安装MongoDB(centos 7)

  • 首先到官网找到对应的版本下载地址(centos 7对应的是RHEL 7的版本):

《Node.js从白痴到入门(五):MongoDB》

  • 登录服务器,使用wget命令下载:
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.10.tgz // 下载速度真的好慢
  • 解压安装
$ tar -zxvf mongodb-linux-x86_64-rhel70-3.4.10.tgz  // 解压
$ export PATH=/opt/mongodb-linux-x86_64-rhel70-3.4.10/bin/:$PATH // 添加PATH路径(解压路径下的bin目录)
  • 同样创建目录来存储文件,并创建一个配置文件mongodb.conf(参数说明):
# 设置数据文件的存放目录
dbpath = /workspace/mongodb/db

# 设置日志文件的存放目录及其日志文件名
logpath = /workspace/mongodb/log/mongodb.log

# 设置端口号(默认的端口号是 27017)
port = 27017

# 设置为以守护进程的方式运行,即在后台运行
fork = true

# 关闭http接口,默认关闭27018端口访问
nohttpinterface = true
  • 启动服务
$ mongod --config /workspase/mongodb/mongodb.conf

《Node.js从白痴到入门(五):MongoDB》

  • 打开一个客户端链接
$ mongo
// > exit退出链接
  • 退出服务
$ mongo
> use admin
> db.shutdownServer()

至此你的MongoDB已经跑起来。

nodejs连接MongoDB

我们现在来使用nodejs连接MongoDB,做一个用户注册和显示所有用户的页面。我们直接把users路由改了(也可以重新创建一个):

var express = require('express');
var router = express.Router();

// 数据库
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('127.0.0.1:27017/nodetest');

/* 注册页面*/
router.get('/reginfo', function(req, res, next) {
    res.render('reginfo', { title: '注册' });
});

router.post('/register', function(req, res, next) {
    // 取得post传递上来的参数
    var name = req.body.name;
    var password = req.body.password;
    var email = req.body.email;
    var qq = req.body.qq;
    var sex = req.body.sex;
    var content = req.body.content;

    // 插入数据库
    db.get('users').insert({
        "name": name,
        "password": password,
        "email": email,
        "qq": qq,
        "sex": sex,
        "content": content
    }, function (err, doc) {
        // 查找已经存在的用户资料
        db.get('users').find({}, {}, function (e, data) {
            var r = err?"注册失败":"注册成功"
            res.render('register', { title: '注册结果', ret: r, users: data});
        });
    }); 
});

module.exports = router;

这里关键是引用了两个模块,mongodb和monk,我们可以从npm上下载下来:

> npm install mongodb --save
> npm install monk --save

添加两个视图,reginfo和register:

// reginfo.ejs
<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <meta charset="utf-8">
  </head>
  <body>
    <form name="form" method="post" action="register"><!--表单提交给users/register-->
  <table width="500" border="0" align="center" cellpadding="5" cellspacing="0">
    <tr align="center" bgcolor="#006699"> 
      <td height="28" colspan="2" bgcolor="#EAFFD4">注 册 页 面</td>
    </tr>
    <tr align="center"> 
      <td height=5></td>
    </tr>
    <tr align="center"> 
      <td width="83" align="right">昵称:</td>
      <td width="197" align="left"><input name="name" type="text" id="name" maxlength="6">*</td> 
    </tr>
    <tr align="center"> 
      <td align="right">密码:</td>
      <td align="left"><input name="password" type="password" id="password">*</td>
    </tr>
    <tr align="center"> 
      <td align="right">确认密码:</td>
      <td align="left"><input name="password2" type="password" id="password2">*</td>
    </tr>
    <tr align="center"> 
      <td align="right">邮箱:</td>
      <td align="left"><input name="email" type="text" id="email" value=""></td>
    </tr>
    <tr align="center">
      <td align="right">QQ:</td>
      <td align="left"><input name="qq" type="text" id="qq" value="">*</td>
    </tr>
    <tr align="center"> 
      <td align="right">性别:</td>
      <td align="left">
        <input name="sex" type="radio" value="1" checked>男 
        <input type="radio" name="sex" value="2">女
      </td>
    </tr>
    
    <tr align="center"> 
      <td align="right">个性签名:</td>
      <td align="left"><textarea name="content" cols="39" rows="6" id="content">嘿嘿,多少写一点吧!</textarea></td>
    </tr>
    <tr align="center"> 
      <td colspan="2"> <input name="Submit" type="submit" value="确认注册"> 
             
        <input type="reset" name="Submit2" value="重新输入"> </td>  
    </tr>
  </table>
</form>
  </body>
</html>

// register.ejs
<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <meta charset="utf-8">
  </head>
  <body>
    <table width="500" border="0" align="center" cellpadding="5" cellspacing="0">
    <tr><td><%=ret%></td></tr>
    <% for(var i in users){ %>
    <tr><td>·<%=users[i].name%></td></tr>
    <% } %>
    </table>
  </body>
</html>

顺便也修改一下我们的主页:

// index.js
var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: '主页' });
});

module.exports = router;

// index.ejs
<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>欢迎</h1>
    <p><a href="users/reginfo">注册</a><p>
  </body>
</html>

重新启动我们的项目,访问:

《Node.js从白痴到入门(五):MongoDB》 主页
《Node.js从白痴到入门(五):MongoDB》 注册
《Node.js从白痴到入门(五):MongoDB》 结果

我们的小麻雀网站已经建立起来啦,这系列到此就结束了,往后就看小伙伴们各自发挥了。

获取更多的MongoDB使用说明

源码

点鸡下崽

添加访问账户密码

$ mongo
> use admin
> db.createUser({user:"root",pwd:"root123",roles:["root"]}) // 添加一个root类型的管理员(超级管理员,目前权限配置只能在admin数据库下登录),在哪个数据库下创建的账户只能在那个数据库下登录。
> db.auth("root","root123") // 使用root账户登录(登录成功返回1)
// 创建其它数据库的用户(先在admin中登录,然后切换数据库)
> use testDB
> db.createUser({user:"root",pwd:"huahua123",roles:[{"role":"readWrite","db":"testDB"}]})

// 重新启动(需要关闭客户端重新打开)
$ mongod --config /workspace/mongodb/mongodb.conf --auth

// 远程连接
$ mongo 远程主机ip或DNS:MongoDB端口号/数据库名 -u user -p password
    原文作者:云华兄
    原文地址: https://www.jianshu.com/p/42b6799229a2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞