二十六、Node.js 访问 MongoDB
云少二十六、Node.js 访问 MongoDB
MongoDB 是一种文档导向的 NoSQL 数据库管理系统,由 C++ 撰写而成
本章节我们将学习如何使用 Node.js 来连接 MongoDB,并对数据库进行操作
如果你还没有 MongoDB 的基本知识,可以参考我们的 MongoDB 基础教程
安装 MongoDB 驱动
使用 NPM 安装 MongoDB 驱动 mongodb
安装完成后我们就可以使用 mongodb 模块访问 MongoDB 数据库了
引入 mongodb 模块
1
| var driver = require('mongodb').MongoClient;
|
MongoDB 数据库操作( CURD )
与 MySQL 不同的是 MongoDB 会自动创建数据库和集合
因此使用前我们可以不需要手动去创建它们
插入数据
下面的范例我们访问数据库 test中的 site 表,并插入两条数据
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| var driver = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/test';
var insertData = function(db, callback) { var collection = db.collection('site'); var data = [{"name":"教程 ","url":"test"},{"name":"腾讯","url":"tech.souyunku.com"}]; collection.insert(data, function(err, result) { if(err) { console.log('Error:'+ err); return; } callback(result); }); }
driver.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); insertData(db, function(result) { console.log(result); db.close(); }); });
|
运行以上 Node.js 代码,输出结果如下
1 2 3 4 5 6 7 8 9 10
| $ node main.js 连接成功! { result: { ok: 1, n: 2 }, ops: [ { name: '教程 ', url: 'test', _id: 59ef2c8af75bf73721c3e66b }, { name: '腾讯', url: 'test', _id: 59ef2c8af75bf73721c3e66c } ], insertedCount: 2, insertedIds: [ 59ef2c8af75bf73721c3e66b, 59ef2c8af75bf73721c3e66c ] }
|
从输出结果来看,数据已插入成功
我们可以使用 mongo 命令行工具登录到 127.0.0.1:27017 的 MongoDB 服务器查看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| $ mongo MongoDB shell version v3.4.9 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.9 > show dbs admin 0.078GB gridfs 0.078GB test 0.078GB souyunku 0.078GB > use test switched to db test > show tables counters language lession site system.indexes users > db.site.find() { "_id" : ObjectId("59ef2c8af75bf73721c3e66b"), "name" : "教程 ", "url" : "test" } { "_id" : ObjectId("59ef2c8af75bf73721c3e66c"), "name" : "腾讯", "url" : "test" } >
|
查询数据
使用 find() 方法从 site 集合中查找 name 为 “搜云库技术团队” 的数据
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| var driver = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/test';
var selectData = function(db, callback) { var collection = db.collection('site'); var whereStr = {"name":'教程 '}; collection.find(whereStr).toArray(function(err, result) { if(err) { console.log('Error:'+ err); return; } callback(result); }); }
driver.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); selectData(db, function(result) { console.log(result); db.close(); }); });
|
运行以上 Node.js 代码,输出结果如下
1 2 3 4 5
| $ node main.js 连接成功! [ { _id: 59ef2c8af75bf73721c3e66b, name: '教程 ', url: 'test' } ]
|
更新数据
update() 方法可以对数据库的数据进行修改
下面的范例我们将 name 为 “教程 ” 的 url 改为 https://test.com
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| var driver = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/test';
var updateData = function(db, callback) { var collection = db.collection('site'); var whereStr = {"name":'教程 '}; var updateStr = {$set: { "url" : "https://tech.souyunku.com" }}; collection.update(whereStr,updateStr, function(err, result) { if(err) { console.log('Error:'+ err); return; } console.log("修改数据成功"); callback(result); }); }
driver.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); updateData(db, function(result) { db.close(); }); });
|
运行以上 Node.js 代码,输出结果如下
1 2 3
| $ node main.js 连接成功! 修改数据成功
|
进入 mongo 管理工具查看数据已修改:
1 2 3 4
| > db.site.find() { "_id" : ObjectId("59ef2c8af75bf73721c3e66b"), "name" : "教程 ", "url" : "https://test.com" } { "_id" : ObjectId("59ef2c8af75bf73721c3e66c"), "name" : "腾讯", "url" : "test" } >
|
删除数据
delete() 方法可以用来删除数据
下面的范例,我们将 name 为 “hello” 的数据删除
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| var driver = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/test';
var delData = function(db, callback) { var collection = db.collection('site'); var whereStr = {"name":'教程 '}; collection.remove(whereStr, function(err, result) { if(err) { console.log('Error:'+ err); return; } console.log("删除数据成功!") callback(result); }); }
driver.connect(DB_CONN_STR, function(err, db) { console.log("连接成功!"); delData(db, function(result) { db.close(); }); });
|
运行以上 Node.js 代码,输出结果如下
1 2 3
| $ node main.js 连接成功! 删除数据成功!
|
进入 mongo 管理工具查看数据已删除:
1 2
| > db.site.find() { "_id" : ObjectId("59ef2c8af75bf73721c3e66c"), "name" : "腾讯", "url" : "test" }
|