mongodb讲解
Posted 专注交流一百年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb讲解相关的知识,希望对你有一定的参考价值。
继上一篇通过koa创建一个后台管理系统,我们已经把一个后台管理系统的基本页面构建完成了,接下来就是需要将数据給填充进去,我们首先能想到的就是数据库,今天大勋讲给大家带来的是非关系型数据库mongodb的使用教程。
要想使用mongodb,我们必须得先安装他,如果你是去官网下载,那么你必须得先注册账号才可以
如果你不想注册之后再下载,可以直接去大勋的百度网盘下载:
下载安装好之后,一定要记得自己的安装目录,比如说大勋安装的mongodb的目录为
D:\Program Files\MongoDB\Server\3.4\bin
接下来就是如何使用它
第一步:制作快速执行文件bat文件
1.1 在系统的根目录下创建一个data空文件夹(大勋的在D盘),在其内部创建一个空的db文件夹,再创建一个文件startMongo.bat,一定要注意bat文件格式为UTF-8编码格式,在此建议大家使用notepad++编辑器,接下来输入以下指令
d:
cd D:\Program Files\MongoDB\Server\3.4\binmongod --dbpath d:\data\db
保存文件后双击startMongo.bat,如果出现如图所示字样表明此次快速执行文件制作完毕。
1.2 如果你不熟悉mongodb的使用,你可以再制作一个测试mongodb命令的快速执行文件,同样的道理,在d盘下的data目录中创建一个文件mongo.bat,注意文件编码格式为UTF-8,输入以下指令
d:
cd D:\Program Files\MongoDB\Server\3.4\bin
mongo
保存文件后双击,如果出现如图所示字样表明此次快速执行文件制作完毕
第二步、打开数据库连接池,就像我们生活中的某一个酒店,他现在通知我们可以开始营业
打开方式,双击startMongo.bat即可,切记不可关闭
第三步、安装可视化工具robomongo,在上面的百度云盘中可以看到,安装完成后,我们可以打开它,按照
File==>connect==>create顺序创建一个数据库的连接入口,创建好以后就可以直接每次点击连入了
第四步、命令行测试数据库常用命令----增删改查
依次输入以下指令 >代表输入指令,下一行为输出结果,红色表示输出结果,绿色表示注释语句,紫色表示其他命令
> db
test // 默认数据库名称
> use management_system
switched to db management_system // 切换数据库,遵循有则替换、无则创建并替换原则
> db
management_system // 显示当前数据库名称
> db.createCollection('users')
{ "ok" : 1 } // 创建数据库集合成功
> db.users
management_system.users // 查询当前数据库集合
> db.createCollection('list')
{ "ok" : 1 } // 创建数据库集合成功
> db.getCollectionNames()
[ "list", "users" ] // 显示当前数据库下的所有集合----数组的展示形式
> db.users.insert({username:'wdx',password: 123})
WriteResult({ "nInserted" : 1 }) // 插入单条数据成功
>db.users.insert([{username:'yanglin',password:'123'},{username: 'zck',password:'3838438'}])
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:0}) // 输出查询结果,过滤掉_id这个属性
{ "username" : "yanglin", "password" : "123" }
{ "username" : "zck", "password" : "3838438" }
{ "username" : "wdx", "password" : 123 }
> db.users.updateOne({username:'wdx'},{$set:{pwd:'456'}}) // 更新username字段为wdx的记录,将其密码设置为456
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 } // 更新多条数据为updateMany
> db.users.deleteOne({username:'wdx'}) // 删除username字段为wdx的记录
{ "acknowledged" : true, "deletedCount" : 1 } // 删除多条数据为deleteMany
> db.users.find({},{_id:0}) // 查询数据,发现少了一条数
{ "username" : "yanglin", "password" : "123" }
{ "username" : "zck", "password" : "3838438" }
第五步、为了丰富我们的数据库,接下来我们将创建以下几个数据库集合
依次输入以下指令
db.createCollection('movie')
db.createCollection('casts')
db.createCollection('directors')
相关联的数据大家可以去百度网盘下载:链接:https://pan.baidu.com/s/1V08AQT6iqE5mZ0Ylm5-hKA 密码:ogdu
下来插入数据即可,复制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、 引入模块
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({username: 'zck'}, (err) => {
// if(err) throw err;
// console.log('删除成功')
// db.close();
// })
users_collection.deleteMany({password: '123456'}, (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({password: '123'}, {password:'456'}, (err) => {
// if(err) throw err;
// console.log('修改成功');
// db.close();
// })
users_collection.updateMany({password: '123'}, {$set: {password:'456'}}, (err) => {
if(err) throw err;
console.log('修改成功');
db.close();
})
})
7.5 查询数据 ---- 各种条件查询
const mysql = require('./mysql');
// mysql.find('movie_collection', {year: 1994}, {_id:0, title: 1, year: 1}, (data) => {
// console.log(data)
// })
// 按照上映时间排序
// mysql.find('movie_collection', {}, {_id:0, title: 1, year: 1}, (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', {}, {_id:0, title: 1, year: 1}, (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 = {year: {$gte: 1993, $lte: 2000}};
// const showObj = {_id: 0, title: 1, year: 1};
// mysql.find('movie_collection', whereObj, showObj, (data) => {
// console.log(data)
// })
// 查询电影汇总有“的“字的数据 ----- 查询----模糊查询 /str/ 以str开头的查询 /^ str/
// const whereObj = {title: /的/};
// const showObj = {_id: 0, title: 1};
// mysql.find('movie_collection', whereObj, showObj, (data) => {
// console.log(data)
// })
const str = '肖';
const whereObj = {title: eval('/^' + str + '/')}; // 查询js中eval()函数的作用
const showObj = {_id: 0, title: 1};
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;
好了,本次的内容分享到这里就结束了,大勋下次的分享内容为:在koa框架创建的项目中使用mongdb本次插入的数据实现电影管理中的增删改查功能,敬请期待。
写的不好的地方,或者大家有什么好的意见,可以留言发送给我,我会积极听取你们的意见。
以上是关于mongodb讲解的主要内容,如果未能解决你的问题,请参考以下文章
Node.js | MongoDB 入门讲解 & Mongoose 模块的初步应用