mongodb讲解

继上一篇通过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本次插入的数据实现电影管理中的增删改查功能,敬请期待。

写的不好的地方,或者大家有什么好的意见,可以留言发送给我,我会积极听取你们的意见。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180821G1BVMM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券