node中使用mongodb数据库

下载第三方包mongodb

npm install mongodb

创建数据库

要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。

如果数据库不存在,MongoDB 将创建数据库并建立连接。

const MongoClient = require('mongodb').MongoClient
const url = "mongodb://localhost:27017/mongodb-test"
 
MongoClient.connect(url, (err, db) => {
  if (err) throw err
  console.log("数据库已创建!")
  db.close()
})

创建集合

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

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/mongodb-test'

MongoClient.connect(url, (err, db) => {
    if (err) throw err
    console.log('数据库已创建')
    const dbase = db.db("runoob")
    dbase.createCollection('site', function (err, res) {
        if (err) throw err;
        console.log("创建集合!")
        db.close()
    })
})

添加单条数据 insertOne()

连接数据库 mongodb-test 的 users表,并插入一条数据条数据,使用 insertOne()

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (err, db) => {
  if (err) throw err
  const dbo = db.db('mongodb-test')
  const info = { name: '张三', age: 18 }
  dbo.collection('users').insertOne(info, (err, res) => {
    if (err) throw err
    console.log('数据添加成功')
    console.log(res)
    db.close()
  })
})

添加成功 res 返回以下图片内容

在这里插入图片描述

acknowledged: true 表示添加成功
insertedId: new ObjectId(“61f8c8acc8bef5f9f07f9663”) 自动添加了一条ID

添加多条数据 insertMany()

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  const infos = [
    { name: '小明', age: 20 },
    { name: '小红', age: 15 },
    { name: '小强', age: 30 },
    { name: '小李', age: 17 },
    { name: '小蓝', age: 19 },
  ]
  dbo.collection('users').insertMany(infos, (err, res) => {
    if (err) throw err
    console.log("插入的文档数量为: " + res.insertedCount)
    console.log(res)
    db.close()
  })
})

添加成功 res 返回以下图片内容
在这里插入图片描述

insertedCount 为插入的条数。

查询所有数据 find({})

使用 find() 来查找数据, find() 可以返回匹配条件的所有数据。 如果未指定条件,find() 返回集合中的所有数据。

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  dbo.collection('users').find({}).toArray((err, res) => {
    if (err) throw err
    console.log(res)
    db.close()
  })
})

toArray 将查询结构放到数组中

查询成功 res 返回以下图片内容
在这里插入图片描述

查询指定条件的数据 find({条件})

查询 name张三

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  const whereStr = {"name":'菜鸟教程'}  // 查询条件
  dbo.collection('users').find(whereStr).toArray((err, res) => {
    if (err) throw err
    console.log(res)
    db.close()
  })
})

查询成功 res 返回以下图片内容
在这里插入图片描述

更新单条数据 updateOne()

name张三age 改为100

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  const whereStr = {'name': '张三'}
  const updateStr = {$set: {'age': '100'}}
  dbo.collection('users').updateOne(whereStr, updateStr, (err, res) => {
    if (err) throw err
    console.log(res)
  })
})

更新成功 res 返回以下图片内容
在这里插入图片描述

更新多条数据 updateMany()

更新所有age小于20岁的添加一个newAge属性,值为50

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  const whereStr = {'age': {$lt: 20}} // age小于20的
  const updateStr = {$set: { newAge: 50 }}
  dbo.collection('users').updateMany(whereStr, updateStr, (err, res) => {
    if (err) throw err
    console.log(res)
    db.close()
  })

更新成功 res 返回以下图片内容
在这里插入图片描述

删除单条数据 deleteOne()

删除name张三的数据

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  const whereStr = {'name': '张三'}
  dbo.collection('users').deleteOne(whereStr, (err, res) => {
    if (err) throw err
    console.log(res)
  })
})

删除成功 res 返回以下图片内容
在这里插入图片描述

deletedCount 删除的条数

删除多条数据deleteMany()

删除newAge50的数据

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  const whereStr = {'newAge': 50}
  dbo.collection('users').deleteMany(whereStr, (err, res) => {
    if (err) throw err
    console.log(res)
  })
})

删除成功 res 返回以下图片内容
在这里插入图片描述

排序 sort()

排序 使用 sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  let mysort = { age: -1 }
  dbo.collection('users').find().sort(mysort).toArray((err, res) => {
    if (err) throw err
    console.log(res)
    db.close()
  })
})

{ type: 1 } 按 type 字段升序
{ type: -1 } 按 type 字段降序

查询成功 res 返回以下图片内容
在这里插入图片描述

查询分页 limit()

如果要设置指定的返回条数可以使用 limit() 方法,该方法只接受一个参数,指定了返回的条数。

MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  dbo.collection('users').find().limit(3).toArray((err, res) => {
    if (err) throw err
    console.log(res)
    db.close()
  })
})

查询成功 res 返回以下图片内容
在这里插入图片描述

跳段查询 skip()

如果要指定跳过的条数,可以使用 skip() 方法。

// skip(): 跳过前面三条数据,读取两条数据
MongoClient.connect(url, (error, db) => {
  if (error) return console.log('数据库连接失败' + error)
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  dbo.collection('users').find().skip(3).limit(2).toArray((err, res) => {
    if (err) throw err
    console.log(res)
    db.close()
  })
})

查询成功 res 返回以下图片内容
在这里插入图片描述

关联查询

mongoDB 不是一个关系型数据库,但我们可以使用 $lookup 来实现左连接。

例如我们有两个集合数据分别为:

users表:
在这里插入图片描述

phones表:
在这里插入图片描述
$lookup 实现左连接

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (error, db) => {
 if (error) return console.log('数据库连接失败' + error)
 console.log('数据库连接成功')
 const dbo = db.db('mongodb-test')
 
 dbo.collection('users').aggregate([
   {
     $lookup: {
       from: 'phones',			// 右集合
       localField: 'phone_id',	// 左集合 join 字段
       foreignField: '_id',		// 右集合 join 字段
       as: 'userPhone'			// 新生成字段(类型array)
     }
   },
   {
     $limit: 4		// 查询前四条数据
   }
 ]).toArray((err, res) => {
   if (err) throw err
   console.log(res)
   db.close()
 })
})

查询成功 res 返回以下图片内容

在这里插入图片描述

聚合管道

使用聚合管道可以对集合中的文档进行变换和组合,可以用来做表关联查询、数据的统计

MongoClient.connect(url, (err, db) => {
  if (err) return console.log('数据库连接失败')
  
  const dbo = db.db('mongodb-test').collection('phones')

  dbo.aggregate([
    // 查询 价格小于1000的
    { $match: { price: {$lt: 1000} } },
    // 以 phone_id 分组,求
    { $group: { _id: '$phone_id', res: { $sum: '$price' } } },
    // 只查询两条
    { $limit: 2 }
  ]).toArray((err, info) => {
    console.log(info)
  })
})
MongoClient.connect(url, (err, db) => {
  if (err) return console.log('数据库连接失败')
  
  const dbo = db.db('mongodb-test').collection('phones')

  dbo.aggregate([
    // 只显示 price和goods字段
    { $project: { price: 1, goods: 1 } },
    // 查询 价格大于1000的
    { $match: { price: {$gt: 1000} } },
    // 只查询两条
    { $limit: 2 },
    // 降序排序
    { $sort: { price: -1 } }
  ]).toArray((err, info) => {
    console.log(info)
  })
})

删除集合 drop

删除site集合,如果没有则会抛出错误

const MongoClient = require('mongodb').MongoClient
const url = 'mongodb://localhost:27017/'

MongoClient.connect(url, (err, db) => {
  if (err) return console.log('数据库连接失败')
  console.log('数据库连接成功')
  const dbo = db.db('mongodb-test')
  dbo.collection('site').drop((err, delOK) => {
    if (err) throw err
    if (delOK) console.log('集合已删除')
    console.log(delOK)
    db.close()
  })
})

删除成功:
在这里插入图片描述

删除失败,没有此集合:
在这里插入图片描述

MongoDB 数据库的导入导出

在 MongoDB 中我们使用 mongodump 命令来备份 MongoDB 数据。该命令可以导出所有数据到指定目录中。mongodump 命令可以通过参数指定导出的数据量及转存的服务器。使用 mongorestor 命令来恢复备份的数据。

导出:

mongodump -h dbhost -d dbname -o dbdirectory

mongodump -h 要导出的地址和端口号 -d 要导出的数据库名称 -o 要导入到哪里

导入:

mongorestore -h dbhost -d dbname <path>

mongorestore -h 要导入的地址和端口号 -d 要导入的数据库名称 从哪里导入
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值