mongodb
首先介绍下什么是mongodb吧
mongodb数据库
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
mongodb官网
那么mongoDB和mysql数据的区别在哪?
或者说关系型数据库和非关系的数据库的区别
关系型数据库和非关系的数据库的区别
Mongodb | Mysql | |
---|---|---|
数据库模型 | 非关系型 | 关系型 |
存储方式 | 虚拟内存+持久化 | 不同引擎有不同的存储方式 |
语法 | 独特的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,
}