继续升级myDemo——关于在项目中添加mongodb数据库

本文探讨了MongoDB与关系型数据库的区别,强调了MongoDB的高速性能、高扩展性、Failover机制和Json存储格式的优势。介绍了在项目中基本的MongoDB增删改查操作,并分享了如何在项目中升级到MongoDB数据库,包括安装模块和数据展示。此外,文章提到了图片的本地存储策略以确保数据可靠性,同时提到了MongoDB的封装技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mongodb

首先介绍下什么是mongodb吧
mongodb数据库
 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
mongodb官网
在这里插入图片描述
那么mongoDB和mysql数据的区别在哪?

或者说关系型数据库和非关系的数据库的区别

关系型数据库和非关系的数据库的区别

MongodbMysql
数据库模型非关系型关系型
存储方式虚拟内存+持久化不同引擎有不同的存储方式
语法独特的Mongo数据库语法传统sql语句
架构特点可以通过副本集,以及分片来实现高可用常见有单点,M-S,MHA, MMM, cluster等架构方式
数据处理方式基于内存,将热数据不同的引擎拥有其自基于内存,将热数据而达到高速读写不同的引擎拥有其自己的特点
成熟度新兴数据库,成熟度较低拥有较为成熟的体系,成熟度较高
广泛度mongodb是较为完善的DB之一使用人群也在不断增长开源数据库的份额在不断增加,mysql的份额也在持续增长

为什么要用mongdb

1.快速!拥有适量级内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中(而不仅仅是索引和少部分数据),使得热数据的读写变得十分快速,从而提高了整体的速度与效率。

⒉高扩展性! Mongodb的高可用与集群架构拥有十分高的扩展性,通过物理机器的增加,以及sharding的增加,Mongodb的扩展将达到一个十分惊人的地步。

3.自身的Failover机制! Mongodb的副本集配置中,当主库遇到问题,无法继续提供服务的时候,副本集将选举出一个新的主库来继续提供服务。

4.Json的存储格式! Mongodb的Json与Bson存储格式十分适合文档格式的存储与查询。

mongdb基本使用

//单条数据
db.collection.insertOne({"a": 3})
{
        "acknowledged" : true,
        "insertedId" : ObjectId("571a218011a82a1d94c02333")
}
//多条数据
db.collection.insertMany([{"b": 3}, {'c': 4}])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("571a22a911a82a1d94c02337"),
                ObjectId("571a22a911a82a1d94c02338")
        ]
}

db.testList.remove({'name':'kkk is null'},1);

//只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
//全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
//只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
//全部添加加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
//全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
//只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

db.col.find({key1:value1, key2:value2}).pretty()

在我们当前项目中只需掌握这些基本mongo技能就可以升级我们的项目了喔,想了解其他更多mongodb数据的知识请搜素其他博主吧

升级数据库

将我们数据库换源成mongodb,并展示在页面展示
首先我们先下载模块 npm i mongodb

//导入crawler
var Crawler = require("crawler");

基本爬取和上篇博客是一样的
就不多赘述了,来介绍下爬虫的其他新技术,将图片路径批量下载到本地
这样做的好处是,当图片连接失效时,还有一份备用本地图片作为数据,好处是不是大大的

//先定义cFile
var cFile = new Crawler({
    encoding: null,
    jQuery: false, // 需要把文件转换成路径保存在数据里面  不需要使用jquery来操作
    callback: function(err, res, done) {
        if (err) {
            console.error(err.stack);
        } else {
            fs.createWriteStream(res.options.filename).write(res.body);
        }

        done();
    }
});
//后在需要的地方引入这行代码
cFile.queue({
    uri: filmIcon,//图片路径
    filename: "../public/image" + filmName + ".png" //存储文件并命名
 });

运行之后的效果
在这里插入图片描述
由于我已经提前封装好了mongodbm以下就直接调用

 //书写需要爬取的页面结构代码
            var li_list = $('.pic').length;
            for (var i = 0; i < li_list; i++) {
            	//英雄名称
                var filmName = $('.name').eq(i).children('a').text();
                //英雄简介
                var filmTro = $('.pic').eq(i).children('a').attr('title');
             	//英雄图标
                var filmIcon;
                //使用本地图片路径添加到数据库
                filmIcon = `/image${filmName}.png`;
                //封装调用添加到mongo数据库
                mgdb.insertMany("film", [{ filmName,filmTro ,filmIcon }], function(result) {
                    console.log("插入成功");
                })
              
            }

在这里插入图片描述

在这里插入图片描述
本次就用本地图片路径来显示的,因为源路经图片显示不出了,

mongodb的封装

const MongoClient = require('mongodb').MongoClient;

const objectId = require("mongodb").ObjectId;


// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'films';

// Use connect method to connect to the server


module.exports = {
    //添加
    insertMany(collectionName, data, callback) {
        // Get the documents collection
        MongoClient.connect(url, { useUnifiedTopology: true }, function(err, client) {
            const db = client.db(dbName);
            const collection = db.collection(collectionName);
            // Insert some documents
            collection.insertMany(data, function(err, result) {
                callback(result);
                client.close();
            });


        });

    },

    // 查找
    find(collectionName, data, callback) {
        // Get the documents collection
        MongoClient.connect(url, { useUnifiedTopology: true }, function(err, client) {
            const db = client.db(dbName);
            const collection = db.collection(collectionName);
            // Insert some documents
            collection.find(data).toArray(function(err, docs) {
                callback(docs);
                client.close();
            });


        });

    },

    // 修改

    updata(collectionName, data1, data2, callback) {

        // Get the documents collection
        MongoClient.connect(url, { useUnifiedTopology: true }, function(err, client) {
            const db = client.db(dbName);
            const collection = db.collection(collectionName);
            // Insert some documents
            collection.updateOne(data1, { $set: data2 }, function(err, result) {
                callback(result);
                client.close();
            });


        });

    },
    // 删除
    remove(collectionName, data, callback) {
        // Get the documents collection
        MongoClient.connect(url, { useUnifiedTopology: true }, function(err, client) {
            const db = client.db(dbName);
            const collection = db.collection(collectionName);
            // Insert some documents
            collection.deleteOne(data, function(err, result) {
                callback(result);
                client.close();
            });


        });

    },
    objectId,
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值