ITPub博客

首页 > 数据库 > > (原创)Node.JS实战47:MongoDB!?大型项目数据库首选。

(原创)Node.JS实战47:MongoDB!?大型项目数据库首选。

作者:浪花小雨滴 时间:2020-05-12 11:31:52 0 删除 编辑

MongoDB是种NoSQL概念数据库(Not only sql)数据库。

MongoDB是基于分布式文件存储的数据库。

简单一句话概括:很强大!性能比MySQL强大、功能更简单、更易用。做大型项目,有很多数据存储的话用它就对了!

1、安装

MongoDB是分布式的,建议使用时独立安装在一台服务器、与功能程序分离。

那么,本文示例,一台运行Node程序,另一台装MongoDB。

Win系统下载安装。

下载时选择系统和版本:



然后是一路Next安装:





4.2.2版本,安装后直接就可以用了,不像旧版需要配置数据库和日志地址、还需要手动启动服务。

2、使用

在另一台机器,开始编写例程。

首先安装Node的MongoDB客户端模块:

npm i mongodb

代码1、连接数据:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/jshaman";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    console.log("Database ready!");
    db.close();
  }
  
});

本例中,192.168.31.18是另一台MongoDB的地址。

执行:



未连接成功,超时了。

有两种原因:另一台机器上的防火墙阻止了连接,或MongoDB的默认配置不允许远程连接。

回到MongoDB安装机器,做如下修改:

关闭防火墙:



修改MongoDB配置文件:



并重启MongoDB服务(不重启的话修改配置不会生效):



再次执行刚才的代码:



连接、创建数据库已成功。

接下来进行数据库操作。

插入数据:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    var dbo = db.db("jshaman");
    var myobj = { name: "web", url: "" };
    
    dbo.collection("mywebs").insertOne(myobj, function(err, res) {
        if (err) throw err;
        console.log("insert success.");
        db.close();
    });
  }
  
});



执行,插入数据成功:



到MongoDB机器,用Mongo命令查看一下刚才插入的数据:



show dbs:查看所有的数据库;
use jshaman:切换到jshaman库;
show tables:查看所有的表;
db.mywebs.find():查询所有数据。

上面是插入一条数据,也可以一次插入多条数据:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    var dbo = db.db("jshaman");
    var myobj =  [
      { name: 'web1', url: 'http://', type: 'cn'},
      { name: 'web2', url: 'http://www.sharewaf.com', type: 'en'},
      { name: 'web3', url: 'https://www.ty2y.com', type: 'en'}
     ];
    dbo.collection("site").insertMany(myobj, function(err, res) {
        if (err) throw err;
        console.log("insert numbers: " + res.insertedCount);
        db.close();
    });
  }
  
});

res.insertedCount 为插入的条数。

执行:



查询数据:

可以使用 find() 来查找数据, find() 可以返回匹配条件的所有数据。 如果未指定条件,find() 返回集合中的所有数据。

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    var dbo = db.db("jshaman");
    
    dbo.collection("site"). find({}).toArray(function(err, result) { 
      if (err) throw err;
      console.log(result);
      db.close();
    });

  }
  
});

执行:



修改代码,加入查询条件:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    var dbo = db.db("jshaman");
    
    // 查询条件
    var whereStr = {"name":'web1'};  
    dbo.collection("site").find(whereStr).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });

  }
  
});

执行:



更新数据:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    var dbo = db.db("jshaman");
    
    // 查询条件
    var whereStr = {"name":'web1'};  
    var updateStr = {$set: { "url" : "http://www.fairysoftware.com" }};
    // 将名为web1的url改为http://www.fairysoftware.com
    dbo.collection("site").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("Update success.");
        db.close();
    });

  }
  
});

但这个方法只会更新一条数据:



如要更新多条或所有:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    var dbo = db.db("jshaman");
    
    // 查询条件
    var whereStr = {"name":'web1'};  
    var updateStr = {$set: { "url" : "http://www.sharewaf.com" }};
    dbo.collection("site").updateMany(whereStr, updateStr, function(err, res) {
      if (err) throw err;
       console.log(res.result.nModified + " updated!");
      db.close();
  });

  }
  
});

执行显示:



确认:



删除数据:

删除某一条数据:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    var dbo = db.db("jshaman");
    
    // 查询条件
    var whereStr = {"name":'web1'}; 
    dbo.collection("site").deleteOne(whereStr, function(err, obj) {
        if (err) throw err;
        console.log("delete success");
        db.close();
    });
  }
  
});

删除多条数据:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://192.168.31.18:27017/";
 
MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) {
  if (err) {
    console.log(err.message);
  }else{
    var dbo = db.db("jshaman");
    
    // 查询条件
    var whereStr = {"name":'web1'}; 
    dbo.collection("site").deleteMany(whereStr, function(err, obj) {
      if (err) throw err;
      console.log(obj.result.n + " delete success!");
      db.close();
    });
  }
  
});

执行:



更多功能:

排序:

使用 sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)。

代码片段:

dbo.collection("site").find().sort(mysort).toArray(function(err, result) {
  if (err) throw err;
  console.log(result);
  db.close();
});

分页查询:

limit():读取两条数据:

    dbo.collection("site").find().limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });

skip(): 跳过前面两条数据,读取两条数据:

    dbo.collection("site").find().skip(2).limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });

MongoDB的常用操作基本就是这些了,感觉怎么样,是不是强大、简单又好用呢?

更多本系列文章?传送门:WangLiwen's Node.JS in practice

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3125226/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39963