MongoDB快速上手

前面我们介绍了 NeDB 数据库,它是一个 NoSQL 的嵌入式数据库。今天我们再来介绍一款 NoSQL 的数据库 MongoDB

在开始学习前,需要准备 MongoDB 的环境。如果还没有 MongoDB 环境,请先阅读 MongoDB环境准备 一节。

安装mongodb

npm 库提供了 mongodb模块 。执行如下命令,安装该模块:

  1. $ npm install mongodb --save

引入依赖

使用 require 引入 mongodb 模块,并获取 MongoClient 对象。

  1. const MongoClient = require('mongodb').MongoClient

连接数据库服务器

NeDB 不同的是,我们在操作 MongoDB 数据库前,需要先连接数据库。

  1. const url = 'mongodb://root:to0r@localhost:27017'
  2. MongoClient.connect(
  3. url,
  4. function(err, client) {
  5. // 其他数据操作
  6. ...
  7. }
  8. )

使用 connect 方法建立连接,connect 方法接收两个参数: urlcallback。其中,url 表示数据库服务器的地址,格式为:

  1. mongodb://{username}:{password}@{host}:{port}

回到本文中具体的例子,即:

  1. const url = 'mongodb://root:to0r@localhost:27017'

callback 接收两个参数,errclientclient 表示已连接的 MongoClient 对象实例。

新建数据库

连上了数据库服务器,我们现在还没有任何数据库,因此需要先新建一个:

  1. // create database
  2. const dbName = 'user'
  3. const db = client.db(dbName)

定义数据库名为 user,使用 db 方法建立数据库。

建表

MongoDB 中,表被称为 collection。建表,也即是建立 collection

  1. // create collection named user
  2. const collectionName = 'user'
  3. const user = await Promise.resolve(db.createCollection(collectionName))

定义表名为 user,使用 createCollection 方法建表。

数据操作

插入

建表后,我们往 user 表中插入一条数据:

  1. // insert data
  2. user.insertOne({
  3. name: 'Alice',
  4. age: 19
  5. }, function(err, res) {
  6. if (err) {
  7. return console.log('insert fail', err)
  8. }
  9. console.log('insert data: ', res.result)
  10. })

学过 NeDB 的同学就会发现,这样的数据操作跟 NeDB 的写法如出一辙。实际上,NeDBMongoDB 的简化版,因此在写法上延续了 MongoDB 的风格。

查询

查询 Alice 的数据:

  1. // find
  2. user.find({
  3. name: 'Alice'
  4. }).toArray(function(err, result) {
  5. console.log('find Alice: ', result)
  6. })

find 方法并不会返回最终结果集,而是返回一个游标 Cursor。要想获取全部结果,需要操作游标一个个寻找数据。第4行,toArray 方法封装了这样的操作,并将数据组织成数组返回。

更新

Alice 的年龄更改为 20

  1. // update
  2. user.updateOne({
  3. name: 'Alice'
  4. }, {
  5. $set: {
  6. age: 20
  7. }
  8. }, function(err, res) {
  9. if (err) {
  10. return console.log(err)
  11. }
  12. console.log('update Alice data')
  13. })

updateOne 对应的,有 updateMany 方法,用于更新多条数据。

验证下是否更改了 Alice 的数据:

  1. // find update
  2. user.find({
  3. name: 'Alice'
  4. }).toArray(function(err, result) {
  5. console.log('find Alice new data: ', result)
  6. })

删除

删除 Alice 的数据:

  1. // delete
  2. user.deleteOne({
  3. name: 'Alice'
  4. }, function(err, obj) {
  5. if (err) {
  6. return console.log(err)
  7. }
  8. console.log('remove data')
  9. })

deleteOne 用于删除一条数据。如要删除多条数据,可以使用 deleteMany 方法。

关闭数据库

最后,使用 close 方法关闭数据库:

  1. // close database
  2. client.close(function(err) {
  3. if (err) {
  4. return console.log(err)
  5. }
  6. console.log('close database')
  7. })

运行demo

执行命令:

  1. $ node demo.js

终端输出如下结果:

  1. insert data: { n: 1, ok: 1 }
  2. update Alice data
  3. find Alice: [ { _id: 5dcd1195c792ec2f720e8dc7, name: 'Alice', age: 19 } ]
  4. find Alice new data: [ { _id: 5dcd1195c792ec2f720e8dc7, name: 'Alice', age: 20 } ]
  5. remove data
  6. close database

下一步

订阅更新,获取更多学习资料,请关注我们的 微信公众号

../../_images/wechat-mp-qrcode.png 小菜学编程