下载第三方包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()
删除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 = {'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 要导入的数据库名称 从哪里导入