Node.js 访问 MongoDB
MongoDB 是一种文档导向的 NoSQL 数据库管理系统,由 C++ 撰写而成
本章节我们将学习如何使用 Node.js 来连接 MongoDB,并对数据库进行操作
如果你还没有 MongoDB 的基本知识,可以参考我们的 MongoDB 基础教程
安装 MongoDB 驱动
使用 NPM 安装 MongoDB 驱动 mongodb
$ npm install mongodb
安装完成后我们就可以使用 mongodb 模块访问 MongoDB 数据库了
引入 mongodb 模块
var driver = require('mongodb').MongoClient;
MongoDB 数据库操作( CURD )
与 MySQL 不同的是 MongoDB 会自动创建数据库和集合
因此使用前我们可以不需要手动去创建它们
插入数据
下面的范例我们访问数据库 twle 中的 site 表,并插入两条数据
main.js
/* * filename: main.js * author: 简单教程(www.twle.cn) * Copyright © 2015-2065 www.twle.cn. All rights reserved. */ var driver = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/twle'; // 数据库为 twle var insertData = function(db, callback) { //连接到表 site var collection = db.collection('site'); //插入数据 var data = [{"name":"简单编程","url":"www.twle.cn"},{"name":"腾讯","url":"www.twle.cn"}]; 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 代码,输出结果如下
$ node main.js 连接成功! { result: { ok: 1, n: 2 }, ops: [ { name: '简单编程', url: 'www.twle.cn', _id: 59ef2c8af75bf73721c3e66b }, { name: '腾讯', url: 'www.twle.cn', _id: 59ef2c8af75bf73721c3e66c } ], insertedCount: 2, insertedIds: [ 59ef2c8af75bf73721c3e66b, 59ef2c8af75bf73721c3e66c ] }
从输出结果来看,数据已插入成功
我们可以使用 mongo 命令行工具登录到 127.0.0.1:27017 的 MongoDB 服务器查看
$ 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 twle 0.078GB > use twle switched to db twle > show tables counters language lession site system.indexes users > db.site.find() { "_id" : ObjectId("59ef2c8af75bf73721c3e66b"), "name" : "简单编程", "url" : "www.twle.cn" } { "_id" : ObjectId("59ef2c8af75bf73721c3e66c"), "name" : "腾讯", "url" : "www.twle.cn" } >
查询数据
使用 find() 方法从 site 集合中查找 name 为 "简单教程" 的数据
main.js
/* * filename: main.js * author: 简单教程(www.twle.cn) * Copyright © 2015-2065 www.twle.cn. All rights reserved. */ var driver = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/twle'; // 数据库为 twle 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 代码,输出结果如下
$ node main.js 连接成功! [ { _id: 59ef2c8af75bf73721c3e66b, name: '简单编程', url: 'www.twle.cn' } ]
更新数据
update() 方法可以对数据库的数据进行修改
下面的范例我们将 name 为 "简单编程" 的 url 改为 https://www.twle.cn
main.js
/* * filename: main.js * author: 简单教程(www.twle.cn) * Copyright © 2015-2065 www.twle.cn. All rights reserved. */ var driver = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/twle'; // 数据库为 twle var updateData = function(db, callback) { //连接到表 var collection = db.collection('site'); //更新数据 var whereStr = {"name":'简单编程'}; var updateStr = {$set: { "url" : "https://www.twle.cn" }}; 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 代码,输出结果如下
$ node main.js 连接成功! 修改数据成功
进入 mongo 管理工具查看数据已修改:
> db.site.find() { "_id" : ObjectId("59ef2c8af75bf73721c3e66b"), "name" : "简单编程", "url" : "https://www.twle.cn" } { "_id" : ObjectId("59ef2c8af75bf73721c3e66c"), "name" : "腾讯", "url" : "www.twle.cn" } >
删除数据
delete() 方法可以用来删除数据
下面的范例,我们将 name 为 "简单教程" 的数据删除
main.js
/* * filename: main.js * author: 简单教程(www.twle.cn) * Copyright © 2015-2065 www.twle.cn. All rights reserved. */ var driver = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/twle'; // 数据库为 twle 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 代码,输出结果如下
$ node main.js 连接成功! 删除数据成功!
进入 mongo 管理工具查看数据已删除:
> db.site.find() { "_id" : ObjectId("59ef2c8af75bf73721c3e66c"), "name" : "腾讯", "url" : "www.twle.cn" }