Node.js & MongoDB 入门教程与使用

前述:

最近在项目中用到了mongodb,然后在查阅资料的过程中,就感觉到了想要的资料文件都零零碎碎的。东一块西一块。很是不方便,今天就来整理一下关于node是如何操作使用mongoDB的,外加一些相关的配置详情介绍。话不多说,开整!

基础:node安装 + mongodb安装

如果已经装过的同学就不用看啦,直接跳过~

1. node安装步骤 (简单带过)

node中文网地址:Node.js中文网

下载就要看各位同学的需求了,没什么特殊设定的同学,就直接按照自己的系统,安装对应的最新版本就好了。我使用的是windows系统,装的是64位。

但是呢,难免会有一些特殊的要求,比方我上家公司的前端框架啊,就要求使用8.x.x版本的node。当然其实都差不多,如果需要安装特定的版本也不难了,直接去官网下找到news的tab,找到你要的版本就好了~

node官网地址:Node.js官网

建议下载安装包,一直下一步就ok~

安装好之后,按住 win + R ;输入 cmd 回车,输入 node -v 回车;npm -v 回车。如果显示对应的版本号,就说明你已经装好拉~

装完node都是附带装好了npm;对于npm相信大家都不陌生了,简言之就是:包管理工具! 通过这个工具,可以安装任何你需要使用的包。是不是很便捷~

这里需要说一下就是,npm去安装的时候,因为 “墙” 的缘故,我们访问npm第三方包通常都很慢。这个时候小伙伴们也不用担心,使用淘宝镜像就可以了。

使用淘宝镜像的方法(两种):

第一种 通过命令配置 修改npm同步包的地址

code

命令:npm config set registry https://registry.npm.taobao.org
验证:npm config get registry
使用方法: npm install xxx

第二种 使用cnpm安装

code

安装cnpm:npm install -g cnpm --registry=https://registry.npm.taobao.org
使用方法: cnpm install xxx
2. mongo安装步骤

mongo官网地址:MongoDB Community Download | MongoDB

Mongo安装比较简单了:按照官网的选项,选择需要的版本,系统,安装包,就可以下载了。也是一样,一直下一步,路径的话,按照自己存放文件的习惯,自定义就好了。(建议文件名都使用英文命名,可以的话,就保持这个习惯。方便后面配置环境变量~)

安装好之后,去安装的bin目录下,执行一下命令,我这边是安装在d盘。

按住 win + R ;输入 cmd 回车,进入bin目录,执行命令👇 回车

code

mongod --dbpath D:\mangoDB\data\db

打开浏览器输入:localhost:27017/ 如果可以正常打开,说明你的Mongo已经安装成功,并且可以正常使用了~

启动mongo的两种方法:

第一种 到bin目录下启动服务

也就是上面提到的。但是这样的方法就需要在每次服务关机之后,再重启的话,都要到bin目录下执行。比较鸡肋~

第二种 部署环境,开机自启动

这样做就会一劳永逸,会随着你部署的机器开机自启,关机自停。往下看。

开始构建数据库服务运行文件:

首先是在mongodb目录下新建data\db和data\log两个子目录。接着mongoDB的目录下新建配置文件mongod.cfg,并将刚刚创建的两个子目录配置进去。

以下是配置项:(根据自己创建的目录,修改一下便可)

code

systemLog:

destination: file

path: D:\mangoDB\data\logs\mongo.log

storage:

dbPath: D:\mangoDB\data\db

一切准备妥当之后,cmd进入到bin目录
执行一下命令:
code

mongod --config "E:\mongodb\mongod.cfg" --install

执行完以上操作之后,基本配置与安装就完成了。

接下来就是启动服务了:(依然是在bin目录下~)

code

net start MongoDB

如果要停止服务也很简单,输入以下命令便可。

code

net stop MongoDB

正文:

好了,一切都准备就绪了,好戏开始啦~

首先你需要新建一个文件夹,然后到这个文件路径下。执行 npm init ,创建一个 package.json 文件,接着 npm install mongodb 开始装包。如果你使用的上面第一种修改同步包的方式,那就 npm install mongodb; 不然就 cnpm install mongodb ,我这边用的修改同步包的方式所以是 npm install mongodb。

code

npm init
npm install mongodb

接着创建一个testDB.js文件,开始体验~

1. 首先要在 MongoDB 中创建一个数据库,我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。

创建连接

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/runoob";

MongoClient.connect(url,{ useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
  if (err) throw err;
  console.log("数据库已创建!");
  db.close();
});

保存,在文件目录下执行

code

node testDB.js
数据库已创建!

会发现 runoob 数据库已经创建好了。

2. 接下来就是创建集合。集合需要使用 createCollection() 方法来创建

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/runoob";

MongoClient.connect(url,{ useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
  if (err) throw err;
  console.log("数据库已创建!");
  var dbase = db.db("runoob");
  dbase.createCollection('site', function (err, res) {
    if (err) throw err;
    console.log("创建集合!");
    db.close();
});
});

保存,在文件目录下执行

code

node testDB.js
数据库已创建!
创建集合!

这个时候我们就已经创建好了数据库与集合了。(关于mango的基本概念,大家可以看一下相关文档 MongoDB 概念解析

3. 插入数据 单条 & 多条

单条:

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var myobj = { name: "菜鸟教程", url: "www.runoob" };
    dbo.collection("site").insertOne(myobj, function(err, res) {
        if (err) throw err;
        console.log("文档插入成功");
        db.close();
    });
});

保存,在文件目录下执行

code

node testDB.js
文档插入成功

多条:

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var myobj =  [
    { name: '菜鸟工具', url: 'https://c.runoob.com', type: 'cn'},
    { name: 'Google', url: 'https://www.google.com', type: 'en'},
    { name: 'Facebook', url: 'https://www.google.com', type: 'en'}
   ];
    dbo.collection("site").insertMany(myobj, function(err, res) {
      if (err) throw err;
      console.log("插入的文档数量为: " + res.insertedCount);
      db.close();
});
});

保存,在文件目录下执行

code

node testDB.js
4. 查询数据 & 查询指定条件的数据

查询数据:

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url,{ useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    dbo.collection("site"). find({}).toArray(function(err, result) { // 返回集合中所有数据
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

保存,在文件目录下执行

code

node testDB.js

查询指定条件的数据:

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
     var whereStr = {"name":'菜鸟教程'};  // 查询条件
    dbo.collection("site").find(whereStr).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

保存,在文件目录下执行

code

node testDB.js
执行以下命令输出就结果为:
[ { _id: 5a794e36763eb821b24db854,
name: '菜鸟教程',
url: 'www.runoob' } ]
5. 更新数据 & 更新多条数据

更新数据:

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true },  function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var whereStr = {"name":'菜鸟教程'};  // 查询条件
    var updateStr = {$set: { "url" : "https://www.runoob.com" }};
    dbo.collection("site").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("文档更新成功");
        db.close();
    });
});

保存,在文件目录下执行

code

node testDB.js

更新多条数据: 要更新所有符合条的文档数据可以使用 updateMany():

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url,{ useNewUrlParser: true, useUnifiedTopology: true },  function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var whereStr = {"type":'en'};  // 查询条件
    var updateStr = {$set: { "url" : "https://www.runoob.com" }};
    dbo.collection("site").updateMany(whereStr, updateStr, function(err, res) {
        if (err) throw err;
         console.log(res.result.nModified + " 条文档被更新");
        db.close();
    });
});

保存,在文件目录下执行

code

node testDB.js
执行以下命令输出就结果为:
{
"_id" : ObjectId("5a794e36763eb821b24db854"),
"name" : "菜鸟教程",
"url" : "https://www.runoob.com"     // 已修改为 https
}
6. 删除数据 & 删除多条数据

删除数据:

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true },  function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var whereStr = {"name":'菜鸟教程'};  // 查询条件
    dbo.collection("site").deleteOne(whereStr, function(err, obj) {
      if (err) throw err;
      console.log("文档删除成功");
      db.close();
});
});

保存,在文件目录下执行

code

node testDB.js

删除多条数据:删除多条语句可以使用 deleteMany() 方法

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url,{ useNewUrlParser: true, useUnifiedTopology: true },  function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var whereStr = { type: "en" };  // 查询条件
    dbo.collection("site").deleteMany(whereStr, function(err, obj) {
    	if (err) throw err;
    	console.log(obj.result.n + " 条文档被删除");
    	db.close();
});
});

保存,在文件目录下执行

code

node testDB.js
1 条文档被删除
7. 排序 & 查询分页

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

code

{ type: 1 }  // 按 type 字段升序
{ type: -1 } // 按 type 字段降序

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url,{ useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    var mysort = { type: 1 };
    dbo.collection("site").find().sort(mysort).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

保存,在文件目录下执行

code

node testDB.js

查询分页:设置指定的返回条数可以使用 limit() 方法,该方法只接受一个参数,指定了返回的条数。

code

limit():读取两条数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url,{ useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    dbo.collection("site").find().limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });
});

保存,在文件目录下执行

code

node testDB.js

如果要指定跳过的条数,可以使用 skip() 方法.

code

limit():读取两条数据 skip():跳过两条数据

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

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

保存,在文件目录下执行

code

node testDB.js
8. 删除集合

使用 drop() 方法来删除集合.

code

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("runoob");
    // 删除 test 集合
    dbo.collection("test").drop(function(err, delOK) {  // 执行成功 delOK 返回 true,否则返回 false
        if (err) throw err;
        if (delOK) console.log("集合已删除");
        db.close();
    });
});

保存,在文件目录下执行

code

node testDB.js
9. 使用 Promise

Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。

如果你还不了解 Promise,可以看看阮一峰老师的 Promise 对象 讲的超级好。

现在我们在一个程序中实现四个连续操作:增加 、查询 、更改 、删除。

code

const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://localhost/";
MongoClient.connect(url).then((conn) => {
    console.log("数据库已连接");
    const test = conn.db("testdb").collection("test");
    // 增加
    test.insertOne({ "site": "runoob.com" }).then((res) => {
        // 查询
        return test.find().toArray().then((arr) => {
            console.log(arr);
        });
    }).then(() => {
        // 更改
        return test.updateMany({ "site": "runoob.com" },
            { $set: { "site": "example.com" } });
    }).then((res) => {
        // 查询
        return test.find().toArray().then((arr) => {
            console.log(arr);
        });
    }).then(() => {
        // 删除
        return test.deleteMany({ "site": "example.com" });
    }).then((res) => {
        // 查询
        return test.find().toArray().then((arr) => {
            console.log(arr);
        });
    }).catch((err) => {
        console.log("数据操作失败" + err.message);
    }).finally(() => {
        conn.close();
    });
}).catch((err) => {
    console.log("数据库连接失败");
});

保存,在文件目录下执行

code

node testDB.js
数据库已连接
[ { _id: 5f1664966833e531d83d3ac6, site: 'runoob.com' } ]
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
[]

用异步函数实现相同的数据操作

code

const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://localhost/";

async function dataOperate() {
    var conn = null;
    try {
        conn = await MongoClient.connect(url);
        console.log("数据库已连接");
        const test = conn.db("testdb").collection("test");
        // 增加
        await test.insertOne({ "site": "runoob.com" });
        // 查询
        var arr = await test.find().toArray();
        console.log(arr);
        // 更改
        await test.updateMany({ "site": "runoob.com" },
            { $set: { "site": "example.com" } });
        // 查询
        arr = await test.find().toArray();
        console.log(arr);
        // 删除
        await test.deleteMany({ "site": "example.com" });
        // 查询
        arr = await test.find().toArray();
        console.log(arr);
    } catch (err) {
        console.log("错误:" + err.message);
    } finally {
        if (conn != null) conn.close();
    }
}

dataOperate();

保存,在文件目录下执行

code

node testDB.js
数据库已连接
[ { _id: 5f1664966833e531d83d3ac6, site: 'runoob.com' } ]
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
[]

总结:

好嘞,差不多全都理完了,这边在讲下额外的使用吧。

1.首先第一个在查询的时候,多条件查询,会使用到 and 或者 or。这两个具体是怎么用呢?

首先是 and

code

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017';
MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function (err, db) {
    if (err) throw err;
    var dbo = db.db("performdb");
    var obj = { "platformname": "xxx.js" };
    var timestart = { "Date": { "$gt": "2020-09-25 0:0:0" } };
    var timeend = { "Date": { "$lt": "2020-09-30 16:36:28" } }
    var whereStr = {
        $and: [obj, timestart, timeend]
    };
    console.log('whereStr: ', whereStr)
    dbo.collection("platformdata").find(whereStr).toArray(function (err, result) {
        if (err) throw err;
        console.log(result);
        console.log(result.length);
        db.close();
    });
});

接着是 or

code

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017';
MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function (err, db) {
  if (err) throw err;
  var dbo = db.db("domDiffdb");
  var mysort = { date: -1 };
  var whereStr = { $or: [{ "runcoderesult": "SUCESS" }, { "runcoderesult": "Fail" }] }; // 查询条件
  dbo.collection('autoallpages').find(whereStr).sort(mysort).toArray(function (err, result) {
      if (err) {
          return err;
      } else {
          const len = result.length
          if (len > 0) {
              db.close();
              res(result) // 返回的对象是个 Array
              console.log('End done')
          } else {
              res('no data')
          }
      }
  });
});

最后是 and 与 or 一起的复杂使用

code

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017';
MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function (err, db) {
  if (err) throw err;
  var dbo = db.db("domDiffdb");
  var mysort = { date: -1 };
  var whereStr = { $or: [{ $and: [{ "runcoderesult": "SUCESS" }, whereobj] }, { $and: [{ "runcoderesult": "Fail" }, whereobj] }] }; // 查询条件
    dbo.collection('autoallpages').find(whereStr).toArray(function (err, result) {
        if (err) {
            return err;
        } else {
            const len = result.length
            if (len > 0) {
                db.close();
                res(result) // 返回的对象是个 Array
                console.log('End done')
            } else {
                res('no data')
            }
        }
    });
});
2.在数据库链接的过程中需要加入参数:{ useNewUrlParser: true, useUnifiedTopology: true } ,为什么呢?如果没有这个参数的话,在连接的时候会报一个 数据库启动警告 的错。

code

  DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.

好了以上就是本次分享的全部内容拉~ 码字不易,看到这就点个赞吧~

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值