继上一篇通过koa创建一个后台管理系统,我们已经把一个后台管理系统的基本页面构建完成了,接下来就是需要将数据給填充进去,我们首先能想到的就是数据库,今天大勋讲给大家带来的是非关系型数据库mongodb的使用教程。
要想使用mongodb,我们必须得先安装他,如果你是去官网下载,那么你必须得先注册账号才可以
官网地址:https://www.mongodb.com/download-center#community
如果你不想注册之后再下载,可以直接去大勋的百度网盘下载:
网盘地址:链接:https://pan.baidu.com/s/1sQAmtoHlh29KxbL32IueeQ 密码:8vpg
下载安装好之后,一定要记得自己的安装目录,比如说大勋安装的mongodb的目录为
D:\Program Files\MongoDB\Server\3.4\bin
接下来就是如何使用它
第一步:制作快速执行文件bat文件
1.1 在系统的根目录下创建一个data空文件夹(大勋的在D盘),在其内部创建一个空的db文件夹,再创建一个文件startMongo.bat,一定要注意bat文件格式为UTF-8编码格式,在此建议大家使用notepad++编辑器,接下来输入以下指令
d:
cdD:\Program Files\MongoDB\Server\3.4\bin
mongod --dbpath d:\data\db
保存文件后双击startMongo.bat,如果出现如图所示字样表明此次快速执行文件制作完毕。
1.2 如果你不熟悉mongodb的使用,你可以再制作一个测试mongodb命令的快速执行文件,同样的道理,在d盘下的data目录中创建一个文件mongo.bat,注意文件编码格式为UTF-8,输入以下指令
d:
cdD:\Program Files\MongoDB\Server\3.4\bin
mongo
保存文件后双击,如果出现如图所示字样表明此次快速执行文件制作完毕
第二步、打开数据库连接池,就像我们生活中的某一个酒店,他现在通知我们可以开始营业
打开方式,双击startMongo.bat即可,切记不可关闭
第三步、安装可视化工具robomongo,在上面的百度云盘中可以看到,安装完成后,我们可以打开它,按照
File==>connect==>create顺序创建一个数据库的连接入口,创建好以后就可以直接每次点击连入了
第四步、命令行测试数据库常用命令----增删改查
依次输入以下指令 >代表输入指令,下一行为输出结果,红色表示输出结果,绿色表示注释语句,紫色表示其他命令
test// 默认数据库名称
> use management_system
switched to db management_system// 切换数据库,遵循有则替换、无则创建并替换原则
management_system// 显示当前数据库名称
> db.createCollection('users')
{ "ok" : 1 }// 创建数据库集合成功
> db.users
management_system.users// 查询当前数据库集合
>db.createCollection('list')
{ "ok" : 1 }// 创建数据库集合成功
> db.getCollectionNames()
[ "list", "users" ]// 显示当前数据库下的所有集合----数组的展示形式
WriteResult({ "nInserted" : 1 })// 插入单条数据成功
BulkWriteResult({
"writeErrors" : [
"writeConcernErrors" : [],
"nInserted" : 2,//插入多条数据成功
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
> db.users.find()// 输出查询结果,每一条数据就是一个对象,且每两个对象之间无关系
{ "_id" : ObjectId("5b7bc769500f5206aac198e1"), "username" : "yanglin", "password" : "123" }
{ "_id" : ObjectId("5b7bc769500f5206aac198e2"), "username" : "zck", "password" : "3838438" }
{ "_id" : ObjectId("5b7bc792500f5206aac198e3"), "username" : "wdx", "password" : 123}
> db.users.find({},)// 输出查询结果,过滤掉_id这个属性
{ "username" : "yanglin", "password" : "123" }
{ "username" : "zck", "password" : "3838438" }
{ "username" : "wdx", "password" : 123 }
> db.users.updateOne(,{$set:})// 更新username字段为wdx的记录,将其密码设置为456
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }// 更新多条数据为updateMany
> db.users.deleteOne()// 删除username字段为wdx的记录
{ "acknowledged" : true, "deletedCount" : 1 }// 删除多条数据为deleteMany
> db.users.find({},)// 查询数据,发现少了一条数
{ "username" : "yanglin", "password" : "123" }
{ "username" : "zck", "password" : "3838438" }
第五步、为了丰富我们的数据库,接下来我们将创建以下几个数据库集合
依次输入以下指令
db.createCollection('movie')
db.createCollection('casts')
db.createCollection('directors')
下来插入数据即可,复制casts.json中的数据,输入以下指令
>db.casts.insert([插入数据])// 插入数据为casts.json中的数据
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 60,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>db.directors.insert([插入数据])// 插入数据为directors.json中的数据
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 20,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>db.movie.insert([插入数据])// 插入数据为movie.json中的数据
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 20,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
第七步、上面几步中,我们都是在控制台中操作数据库,接下来我们结合nodejs来使用一下,实现增删改查功能
必须安装数据库,我们在项目中使用的是2版本的,目前最新版本为3版本,语法会有变更,大家安装切记看清楚版本再下手
cnpm i mongodb@2 -D
7.1 连接数据库----创建文件01connect.js,编辑如下代码,运行命令node 01connect.js
/*
1、 安装第三方模块mongodb到开发依赖中---- 项目依赖、开发依赖、临时依赖
npm install mongodb@2 --save-dev
cnpm i mongodb@2 -D
2、 引入模块
3、 确定数据库连接池的地址
4、 连接数据库
*/
// 引入模块 ---- 引入使用mongodb的客户端,可以链接数据库
const MongoClient = require('mongodb').MongoClient;
// 确定数据库连接池的地址
const connect_url = 'mongodb://localhost:27017/sz1804';
// 连接数据库
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
})
7.2 插入数据
/*
找到集合
db.collection('users_collection')
插入数据 ---- insert
插入单条数据
insertOne({}, (err)=>{})
insert({}, (err)=>{})
insert([{}], (err)=>{})
插入多条数据
insertMany([{},{},{}], (err)=>{})
insert([{},{},{}], (err)=>{})
*/
const insertObj = [
{
username: 'lj',
password: '123'
},
{
username: 'lq',
password: '123'
},
{
username: 'ls',
password: '123'
}
]
const MongoClient = require('mongodb').MongoClient;
const connect_url = 'mongodb://localhost:27017/sz1804';
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
// 执行插入操作
// 找到集合
const users_collection = db.collection('users_collection');
// 插入数据
users_collection.insert(insertObj, (err) => {
if(err) throw err;
console.log('insert success');
// 关闭数据库
db.close();
})
})
7.3 删除数据
/**
* 删除数据
* deleteOne({})
* deleteMany({})
*/
const MongoClient = require('mongodb').MongoClient;
const connect_url = 'mongodb://localhost:27017/sz1804';
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
const users_collection = db.collection('users_collection');
// users_collection.deleteOne(, (err) => {
// if(err) throw err;
// console.log('删除成功')
// db.close();
// })
users_collection.deleteMany(, (err) => {
if(err) throw err;
console.log('删除成功')
db.close();
})
})
7.4 修改数据
/**
* 修改数据
* update({},{}) 第一个参数代表修改哪里,第二表示修改为什么---- 单条和多条必须分清楚,没有像插入一样的统一
* 修改单条数据
* updateOne({},{}) ---- 只会修改一条数据
* 修改多条数据
* updateMany({}, {}) ---- 满足条件的都会被修改
*
* updateOne({},{}, (err) => {
* })
*/
const MongoClient = require('mongodb').MongoClient;
const connect_url = 'mongodb://localhost:27017/sz1804';
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
const users_collection = db.collection('users_collection');
// users_collection.updateOne(, , (err) => {
// if(err) throw err;
// console.log('修改成功');
// db.close();
// })
users_collection.updateMany(, {$set: }, (err) => {
if(err) throw err;
console.log('修改成功');
db.close();
})
})
7.5 查询数据 ---- 各种条件查询
const mysql = require('./mysql');
// mysql.find('movie_collection', , , (data) => {
// console.log(data)
// })
// 按照上映时间排序
// mysql.find('movie_collection', {}, , (data) => {
// data.sort((a, b) => {
// return a.year - b.year
// })
// console.log(data)
// })
// 官方方法可以使用skip()和limit()函数解决
// // 每页显示5条数据,求得第2页数据(下标是从0开始的----拿到计算机中的第一页)
// const pageCode = 0; // 表示第2页
// const limitNum = 5; // 每页显示多少条数据
// mysql.find('movie_collection', {}, , (data) => {
// var result = data.splice(pageCode * limitNum, limitNum);
// console.log(result)
// })
// 筛选数据,可以筛选出那些年上映了电影-----你有哪些品牌
// const type = 'year';
// mysql.distinct('movie_collection', type, (data) => {
// console.log(data)
// })
// 筛选数据, 筛选出1993-2000的电影 ---- 价格区间
// $gt 表示大于 $gte 表示大于等于 $lt 表示小于 $lte 表示小于等于
// const whereObj = };
// const showObj = ;
// mysql.find('movie_collection', whereObj, showObj, (data) => {
// console.log(data)
// })
// 查询电影汇总有“的“字的数据 ----- 查询----模糊查询 /str/ 以str开头的查询 /^ str/
// const whereObj = ;
// const showObj = ;
// mysql.find('movie_collection', whereObj, showObj, (data) => {
// console.log(data)
// })
const str = '肖';
const whereObj = ; // 查询js中eval()函数的作用
const showObj = ;
mysql.find('movie_collection', whereObj, showObj, (data) => {
console.log(data)
})
第八步、封装数据库的增删改查----mysql.js
const MongoClient = require('mongodb').MongoClient;
const connect_url = 'mongodb://localhost:27017/sz1804';
const mysql = {
insert (collectionName, insertObj, callback) {
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
const collection = db.collection(collectionName);
collection.insert(insertObj, (err) => {
if(err) throw err;
// console.log('insert success');
callback();
db.close();
})
})
},
find (collectionName, whereObj, showObj, callback) {
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
const collection = db.collection(collectionName);
collection.find(whereObj, showObj).toArray((err, data) => {
if(err) throw err;
callback(data);
db.close();
})
})
},
update (collectionName, whereObj, updateObj, type, callback) {
// type 为true, 表示更新所有的,为false,表示更新一个
let updateType = 'updateOne';
type == true ? updateType = 'updateMany' : updateType = 'updateOne';
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
const collection = db.collection(collectionName);
collection[updateType](whereObj, {$set: updateObj}, (err) => {
if(err) throw err;
callback();
db.close();
})
})
},
delete (collectionName, whereObj, type, callback) {
let deleteType = 'deleteOne';
type == true ? deleteType = 'deleteMany' : deleteType = 'deleteOne';
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
const collection = db.collection(collectionName);
collection[deleteType](whereObj, (err) => {
if(err) throw err;
callback();
db.close();
})
})
},
distinct (collectionName, type, callback) {
MongoClient.connect(connect_url, (err, db) => {
if(err) throw err;
console.log('db is connecting')
const collection = db.collection(collectionName);
collection.distinct(type, (err, data) => {
if(err) throw err;
callback(data);
db.close();
})
})
}
}
module.exports = mysql;
如上所述,我们本章节中实现了数据库mongodb的增删改查功能,最后封装了一个模块mysql.js,在后续项目中我们可以使用它,让我们的代码写起来如虎添翼。本文中的代码网盘地址链接:https://pan.baidu.com/s/13Dko0jpKXmsl2_lfLn8CHQ 密码:b9h2
好了,本次的内容分享到这里就结束了,大勋下次的分享内容为:在koa框架创建的项目中使用mongdb本次插入的数据实现电影管理中的增删改查功能,敬请期待。
写的不好的地方,或者大家有什么好的意见,可以留言发送给我,我会积极听取你们的意见。
领取专属 10元无门槛券
私享最新 技术干货