MongoDB是一种文档导向数据库管理系统,由C++撰写而成。

本章节我们将为大家介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。

如果你还没有 MongoDB 的基本知识,可以参考我们的教程:MongoDB 教程

安装驱动

本教程使用了淘宝定制的 cnpm 命令进行安装:

<span style="color:#000000">$ cnpm install mongodb</span>
 

接下来我们来实现增删改查功能。


创建数据库

要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。 如果数据库不存在,MongoDB 将创建数据库并建立连接。

创建连接

varMongoClient =require('mongodb').MongoClient;varurl ="mongodb://localhost:27017/mydb";MongoClient.connect(url,function(err,db){if(err)throwerr;console.log("数据库已创建!");db.close();});


创建集合

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

创建集合

varMongoClient =require('mongodb').MongoClient;varurl ='mongodb://localhost:27017/mydb';MongoClient.connect(url,function(err,db){if(err)throwerr;console.log('数据库已创建');vardbase =db.db("mydb");dbase.createCollection('runoob',function(err,res){if(err)throwerr;console.log("创建集合!");db.close();});});


数据库操作( CURD )

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

插入数据

以下实例我们连接数据库 runoob 的 site 表,并插入两条数据:

插入数据

varMongoClient =require('mongodb').MongoClient;varDB_CONN_STR ='mongodb://localhost:27017/runoob'; # 数据库为 runoobvarinsertData =function(db,callback){//连接到表 sitevarcollection =db.collection('site');//插入数据vardata =[{"name":"菜鸟教程","url":"www.runoob.com"},{"name":"菜鸟工具","url":"c.runoob.com"}];collection.insert(data,function(err,result){if(err){console.log('Error:'+err);return;}callback(result);});}MongoClient.connect(DB_CONN_STR,function(err,db){console.log("连接成功!");insertData(db,function(result){console.log(result);db.close();});});

执行以下命令输出就结果为:



$ node test.js

连接成功!

{ result: { ok: 1, n: 2 },

ops:

[ { name: '菜鸟教程',

url: 'www.runoob.com',

_id: 58c25e13a08de70d3b9d4116 },

{ name: '菜鸟工具',

url: 'c.runoob.com',

_id: 58c25e13a08de70d3b9d4117 } ],

insertedCount: 2,

insertedIds: [ 58c25e13a08de70d3b9d4116, 58c25e13a08de70d3b9d4117 ] }
.js 连接成功! { result: { ok: 1, n: 2 }, ops: [ { name: '菜鸟教程', url: 'www.runoob.com', _id: 58c25e13a08de70d3b9d4116 }, { name: '菜鸟工具', url: 'c.runoob.com', _id: 58c25e13a08de70d3b9d4117 } ], insertedCount: 2, insertedIds: [ 58c25e13a08de70d3b9d4116, 58c25e13a08de70d3b9d4117 ] }
 

从输出结果来看,数据已插入成功。

我们也可以打开 MongoDB 的客户端查看数据,如:



> show dbs

admin 0.000GB

local 0.000GB

runoob 0.000GB # 自动创建了 runoob 数据库

> show tables

site # 自动创建了 site 集合(数据表)

> db.site.find() # 查看集合中的数据

{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "www.runoob.com" }

{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鸟工具", "url" : "c.runoob.com" }

>
show dbs admin 0.000GB local 0.000GB runoob 0.000GB # 自动创建了 runoob 数据库 > show tables site # 自动创建了 site 集合(数据表) > db.site.find() # 查看集合中的数据 { "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "www.runoob.com" } { "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鸟工具", "url" : "c.runoob.com" } >
 

查询数据

以下实例检索 name 为 "菜鸟教程" 的实例:

查询数据

varMongoClient =require('mongodb').MongoClient;varDB_CONN_STR ='mongodb://localhost:27017/runoob';varselectData =function(db,callback){//连接到表varcollection =db.collection('site');//查询数据varwhereStr ={"name":'菜鸟教程'};collection.find(whereStr).toArray(function(err,result){if(err){console.log('Error:'+err);return;}callback(result);});}MongoClient.connect(DB_CONN_STR,function(err,db){console.log("连接成功!");selectData(db,function(result){console.log(result);db.close();});});

执行以下命令输出就结果为:



连接成功!

[ { _id: 58c25f300cd56e0d7ddfc0c8,

name: '菜鸟教程',

url: 'www.runoob.com' } ]
[ { _id: 58c25f300cd56e0d7ddfc0c8, name: '菜鸟教程', url: 'www.runoob.com' } ]
 

更新数据

我们也可以对数据库的数据进行修改,以下实例将 name 为 "菜鸟教程" 的 url 改为 https://www.runoob.com:

更新数据

varMongoClient =require('mongodb').MongoClient;varDB_CONN_STR ='mongodb://localhost:27017/runoob';varupdateData =function(db,callback){//连接到表varcollection =db.collection('site');//更新数据varwhereStr ={"name":'菜鸟教程'};varupdateStr ={$set:{"url" : "https://www.runoob.com"}};collection.update(whereStr,updateStr,function(err,result){if(err){console.log('Error:'+err);return;}callback(result);});}MongoClient.connect(DB_CONN_STR,function(err,db){console.log("连接成功!");updateData(db,function(result){console.log(result);db.close();});});

执行成功后,进入 mongo 管理工具查看数据已修改:



> db.site.find()

{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "https://www.runoob.com" }

{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鸟工具", "url" : "c.runoob.com" }
db.site.find() { "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "https://www.runoob.com" } { "_id" : ObjectId("58c25f300cd56e0d7ddfc0c9"), "name" : "菜鸟工具", "url" : "c.runoob.com" }
 

删除数据

以下实例将 name 为 "菜鸟工具" 的数据删除 :

删除数据

varMongoClient =require('mongodb').MongoClient;varDB_CONN_STR ='mongodb://localhost:27017/runoob';vardelData =function(db,callback){//连接到表varcollection =db.collection('site');//删除数据varwhereStr ={"name":'菜鸟工具'};collection.remove(whereStr,function(err,result){if(err){console.log('Error:'+err);return;}callback(result);});}MongoClient.connect(DB_CONN_STR,function(err,db){console.log("连接成功!");delData(db,function(result){console.log(result);db.close();});});

执行成功后,进入 mongo 管理工具查看数据已删除:



> db.site.find()

{ "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "https://www.runoob.com" }

>
db.site.find() { "_id" : ObjectId("58c25f300cd56e0d7ddfc0c8"), "name" : "菜鸟教程", "url" : "https://www.runoob.com" } >
 

 

学完还想练?点这里!