MongoDB的安装及NodeJS使用MongoDB
MongoDB环境配置及NodeJS使用MongoDB
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();
更多推荐
所有评论(0)