Node.js 连接 MongoDB
MongoDB是一种文档导向数据库管理系统,由C++撰写而成。
本章节我们将为大家介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。
如果你还没有 MongoDB 的基本知识,可以参考我们的教程:MongoDB 教程。
安装驱动
本教程使用了淘宝定制的 cnpm 命令进行安装:
$ cnpm install mongodb
接下来我们来实现增删改查功能。
创建数据库
要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。 如果数据库不存在,MongoDB 将创建数据库并建立连接。创建连接
var
MongoClient
=
require
(
'
mongodb
'
)
.
MongoClient
;
var
url
=
"
mongodb://localhost:27017/mydb
"
;
MongoClient
.
connect
(
url
,
function
(
err
,
db
)
{
if
(
err
)
throw
err
;
console
.
log
(
"
数据库已创建!
"
)
;
db
.
close
(
)
;
}
)
;
创建集合
我们可以使用 createCollection() 方法来创建集合:
创建集合
var
MongoClient
=
require
(
'
mongodb
'
)
.
MongoClient
;
var
url
=
'
mongodb://localhost:27017/mydb
'
;
MongoClient
.
connect
(
url
,
function
(
err
,
db
)
{
if
(
err
)
throw
err
;
console
.
log
(
'
数据库已创建
'
)
;
var
dbase
=
db
.
db
(
"
mydb
"
)
;
dbase
.
createCollection
(
'
runoob
'
,
function
(
err
,
res
)
{
if
(
err
)
throw
err
;
console
.
log
(
"
创建集合!
"
)
;
db
.
close
(
)
;
}
)
;
}
)
;
数据库操作( CURD )
与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。
插入数据
以下实例我们连接数据库 runoob 的 site 表,并插入两条数据:
插入数据
var
MongoClient
=
require
(
'
mongodb
'
)
.
MongoClient
;
var
DB_CONN_STR
=
'
mongodb://localhost:27017/runoob
'
; # 数据库为
runoob
var
insertData
=
function
(
db
,
callback
)
{
//
连接到表 site
var
collection
=
db
.
collection
(
'
site
'
)
;
//
插入数据
var
data
=
[
{
"
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 ] }
从输出结果来看,数据已插入成功。
我们也可以打开 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" } >
查询数据
以下实例检索 name 为 "菜鸟教程" 的实例:
查询数据
var
MongoClient
=
require
(
'
mongodb
'
)
.
MongoClient
;
var
DB_CONN_STR
=
'
mongodb://localhost:27017/runoob
'
;
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
)
;
}
)
;
}
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' } ]
更新数据
我们也可以对数据库的数据进行修改,以下实例将 name 为 "菜鸟教程" 的 url 改为 https://www.runoob.com:
更新数据
var
MongoClient
=
require
(
'
mongodb
'
)
.
MongoClient
;
var
DB_CONN_STR
=
'
mongodb://localhost:27017/runoob
'
;
var
updateData
=
function
(
db
,
callback
)
{
//
连接到表
var
collection
=
db
.
collection
(
'
site
'
)
;
//
更新数据
var
whereStr
=
{
"
name
"
:
'
菜鸟教程
'
}
;
var
updateStr
=
{
$
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" }
删除数据
以下实例将 name 为 "菜鸟工具" 的数据删除 :
删除数据
var
MongoClient
=
require
(
'
mongodb
'
)
.
MongoClient
;
var
DB_CONN_STR
=
'
mongodb://localhost:27017/runoob
'
;
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
;
}
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" } >