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\bin

mongod --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

保存文件后双击,如果出现如图所示字样表明此次快速执行文件制作完毕

mongodb讲解

        第二步、打开数据库连接池,就像我们生活中的某一个酒店,他现在通知我们可以开始营业

        打开方式,双击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讲解的主要内容,如果未能解决你的问题,请参考以下文章

mongodb讲解

mongodb讲解

Node.js | MongoDB 入门讲解 & Mongoose 模块的初步应用

Springboot整合MongoDB的Docker开发,其它应用也类似

关于Linux MongoDB的安装

nodejs使用mongodb做数据持久化