MongoDB的安装及NodeJS使用MongoDB

一:MongoDB环境配置

1:MongoDB的安装

首先进入MongoDB官网

MongoDB Community Download | MongoDB

在这里插入图片描述

下载然后安装

安装好了之后在安装的根目录创建文件 mongo.conf

写入

 #数据库路径
 dbpath=D:\MySoftware\MedioAmbiente\MongoDB\MongoDB\data
 #日志输出文件路径
 logpath=D:\MySoftware\MedioAmbiente\MongoDB\MongoDB\logs\mongo.log
 #错误日志采用追加模式
 logappend=true
 #启用日志文件,默认启用
 journal=true
 #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
 quiet=true
 #端口号 默认为27017
 port=27017

记得把MongoDB的bin目录添加环境变量Path中(基操不赘述)

在这里插入图片描述

以管理员身份打开终端

mongod --config "D:\MySoftware\MedioAmbiente\MongoDB\MongoDB\mongo.conf" --install --serviceName "MongoDB"

在Win+R里面输入services.msc,找到MongoDB服务启动。

2:MongoDB compass的安装

之后下载MongoDB compass

https://www.mongodb.com/try/download/compass

先下载安装包

在这里插入图片描述

之后安装,MongoDB Compass 的 安装配置相对简单,需要改的就是选择安装路径,建议是选择别的盘符,选择钱最好先创建好安装MongoDB Compass的文件夹或者在安装路径地址框直接输入如D:\Work\MongoDBCompass\自动创建。

3:使用MongoDB compass操作MongoDB

新建连接,在[HostName]选项卡中可以直接使用默认配置的连接host地址、端口号和权限认证方式等直接连接,也可以自己配置连接方式,在[MOre Options]选项卡中可以配置复制集合、读取优先权、安全套接字协议、SSH轨道等信息;

在这里插入图片描述

如下图所示,依次是新建数据库,新建集合(表)、删除数据库;

在这里插入图片描述

① 创建数据库

如下图所示,依次填入数据库名称、集合(表)名称,下方可以选择是否是上线集合(表)、是否使用自定义校对规则,是否按时间序列集合排序

在这里插入图片描述

② 创建集合(表)

如下图所示,填入集合(表)名称,下面是哪个选项和创建库的选择一样不做具体说明(见上图),点击[Create Collection]创建集合(表);

后面还有很多MongoDB compass的操作,但是本文主要是记录NodeJS操作MongoDB,就不过多赘述

详情请见以下这篇帖子,记录非常详细

(28条消息) MongoDB Compass的安装及使用图文说明(非常详细)_sunshineGGB的博客-CSDN博客_mongodbcompass

二、NodeJS操作MongoDB

先安装库文件

npm install mongodb --save 
// 或者
cnpm install mongodb --save 
// 或者
yarn add mongodb

接下来我们开始使用增删改查

1:创建数据库

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

如果数据库不存在,MongoDB 将创建数据库并建立连接。

创建连接代码如下:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/addam_cesium";
// const url = 'mongodb://admin:123456@localhost:27017/'; 有密码连接方式 admin 表示用户名,123456 表示密码
MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  console.log("数据库已创建!");
  db.close();
});
2:创建集合

我理解的集合类似于关系数据库中的数据表

我们可以使用 createCollection() 方法来创建集合:

也可以使用MongoDB compass去创建数据库和数据表

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/';
MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    console.log('数据库已创建');
    var dbase = db.db("addam_cesium");
    dbase.createCollection('carTable', function (err, res) {
        if (err) throw err;
        console.log("创建集合!");
        db.close();
    });
});

在这里插入图片描述

三、数据库操作( CURD )

与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。

1:插入数据
(1)插入单条数据

以下实例我们连接数据库 addam_cesium 的 carTable 表,并插入一条数据条数据,使用 insertOne()

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

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("addam_cesium");
    var myobj = {
            "type": "carCurrInfo",
            "id": "1",
            "timestamp": 1660724013,
            "data": {
                "vehicleInfo": {
                    "longitude": 1141740186,
                    "latitude": 304932994,
                    "height": 278589992,
                    "pitch": -17,
                    "roll": -12,
                    "azimuth": 1366,
                    "vehicleSpeed": 1533,
                    "vehicleAcceleration": -15,
                    "steerAngle": -380,
                    "gear": 4,
                    "light": 0,
                    "controlStatus": 1
                },
                "roadPoints": [
                    1141740155,304932889,1141740181,304932978,1141740207,304933067,1141740232,304933155,1141740257,304933244,1141740282,304933332,1141740306,304933419,1141740332,304933514,1141740358,304933608,1141740394,304933741,1141740418,304933833,1141740443,304933926,1141740467,304934017,1141740490,304934105,1141740513,304934195,1141740537,304934282,1141740561,304934375,1141740585,304934467,1141740609,304934558,1141740633,304934646,1141740656,304934735,1141740680,304934825,1141740703,304934912,1141740727,304935001,1141740752,304935094,1141740776,304935186,1141740801,304935276,1141740825,304935367,1141740848,304935455,1141740872,304935548,1141740895,304935639,1141740918,304935727,1141740941,304935821,1141740954,304935870,1141740975,304935961,1141740997,304936052,1141741019,304936146,1141741040,304936236,1141741060,304936327
                ]
            }
        }
    ;
    dbo.collection("carTable").insertOne(myobj, function(err, res) {
        if (err) throw err;
        console.log("文档插入成功");
        db.close();
    });
});
PS D:\MyProject\3D引擎开发\webengine\online-version\addam_node> node .\test.js
文档插入成功

之后看MongoDB compass,可以看到数据已经被插入。

在这里插入图片描述

(2)插入多条数据

如果要插入多条数据可以使用 insertMany():

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

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("addam_cesium");
    var myobj = [{
        "type": "carCurrInfo",
        "id": "测试1",
        "timestamp": "测试1",
        "data": {
            "vehicleInfo": {
                "longitude": "测试1",
                "latitude": "测试1",
                "height": "测试1",
                "pitch": "测试1",
                "roll": "测试1",
                "azimuth": "测试1",
                "vehicleSpeed": "测试1",
                "vehicleAcceleration": "测试1",
                "steerAngle": "测试1",
                "gear": "测试1",
                "light": "测试1",
                "controlStatus": "测试1"
            },
            "roadPoints": [
                "测试1"
            ]
        }
    },{
        "type": "carCurrInfo",
        "id": "测试2",
        "timestamp": "测试2",
        "data": {
            "vehicleInfo": {
                "longitude": "测试2",
                "latitude": "测试2",
                "height": "测试2",
                "pitch": "测试2",
                "roll": "测试2",
                "azimuth": "测试2",
                "vehicleSpeed": "测试2",
                "vehicleAcceleration": "测试2",
                "steerAngle": "测试2",
                "gear": "测试2",
                "light": "测试2",
                "controlStatus": "测试2"
            },
            "roadPoints": [
                "测试2"
            ]
        }
    }];
    dbo.collection("carTable").insertMany(myobj, function(err, res) {
        if (err) throw err;
        console.log("插入的文档数量为: " + res.insertedCount);
        db.close();
    });
});

res.insertedCount 为插入的条数。

在这里插入图片描述

2:查询数据
(1)不带条件

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

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

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

在这里插入图片描述

(2)查询指定条件的数据
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("addam_cesium");
    var whereStr = {"timestamp":1660724013};  // 查询条件
    dbo.collection("carTable").find(whereStr).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

在这里插入图片描述

3:更新数据
(1)更新一条数据

我们也可以对数据库的数据进行修改:

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

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("addam_cesium");
    var whereStr = {"timestamp":"测试1"};  // 查询条件
    var updateStr = {$set: { "id" : "测试111" }};		// 替换掉什么
    dbo.collection("carTable").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("文档更新成功");
        db.close();
    });
});
(2)更新多条数据

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

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

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("addam_cesium");
    var whereStr = {"type":"carCurrInfo"};  // 查询条件
    var updateStr = {$set: { "id" : "1" }};
    dbo.collection("carTable").updateMany(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log(res.matchedCount + " 条文档被更新");
        db.close();
    });
});

res.matchedCount为更新条数

4:删除数据
(1)删除一条数据

删除"timestamp"为"测试1"的数据

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

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("addam_cesium");
    var whereStr = {"timestamp":"测试1"};  // 查询条件
    dbo.collection("carTable").deleteOne(whereStr, function(err, obj) {
        if (err) throw err;
        console.log("文档删除成功");
        db.close();
    });
});
(2)删除多条数据

删除所有"timestamp"为"测试2"的数据

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

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("addam_cesium");
    var whereStr = {"timestamp":"测试2"};  // 查询条件
    dbo.collection("carTable").deleteMany(whereStr, function(err, obj) {
        if (err) throw err;
        db.close();
    });
});
5:查询时排序

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

例如:

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

按 type 升序排列:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
 
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("addam_cesium");
    var mysort = { timestamp: 1 };
    dbo.collection("carTable").find().sort(mysort).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});
6:删除集合

我们可以使用 drop() 方法来删除集合:

drop()

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

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

四:使用 Promise异步操作MongoDB

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

如果你还不了解 Promise,可以参考 JavaScript Promise

1:创建集合

以下实例使用 Promise 创建集合:

const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://localhost:27017/";
MongoClient.connect(url).then((conn) => {
    console.log("数据库已连接");
    var dbase = conn.db("addam_cesium");
    dbase.createCollection("1111").then((res) => {
        console.log("已创建集合");
    }).catch((err) => {
        console.log("数据库操作错误");
    }).finally(() => {
        conn.close();
    });
}).catch((err) => {
    console.log("数据库连接失败");
});
2:Promise 数据操作

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

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

async function dataOperate() {
    var conn = null;
    try {
        // 连接数据库
        conn = await MongoClient.connect(url);
        console.log("数据库已连接");
        const test = conn.db("addam_cesium").collection("testTable");
        // 增加
        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();

// 更改
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();


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐