<返回更多

一文详解Mongodb数据库,适合大数据存储

2023-02-13  今日头条  黑猫编程
加入收藏
在网络交互的过程中,不仅会有数据的传递,也会有新数据的产生。比如我们目前的网站登录注册项目,在用户注册后,我们只是把数据添加到了服务器的内存中,但是程序一旦关闭或者重启,内存中的数据就消失了,服务器会恢复到最初的样子,那注册的用户数据也就没有了。这对于网站来讲,是不可接受的。那么如何解决这个问题呢?

什么是数据库

在网络交互的过程中,不仅会有数据的传递,也会有新数据的产生。比如我们目前的网站登录注册项目,在用户注册后,我们只是把数据添加到了服务器的内存中,但是程序一旦关闭或者重启,内存中的数据就消失了,服务器会恢复到最初的样子,那注册的用户数据也就没有了。这对于网站来讲,是不可接受的。那么如何解决这个问题呢?

服务器程序,就像是我们大脑的记忆,并不是长久的,一旦重启,就会失忆。俗​话说,好记性不如烂笔头。因此最好的办法,就是把数据记录并保存下来。

在早期的网站中,通过把数据写入到文件中来进行保存,即便电脑关闭重启,文件也不会消失。但慢慢的又发现了问题,当文件存储内容过多的时候,很难找到我们想要的那条数据,而且,读取文件也是一个非常耗时的过程。

为了能够更好的存储数据,数据库应运而生,在本系列课程中,我们要使用的数据库是MongoDB。

图书馆是一个存储图书的地方,粮仓是用来存储粮食的。数据库,顾名思义,就是专门用来存储数据的仓库。存储在数据库中的数据,能够长期的保存,并且易于查找。

在数据库中,数据不是杂乱无章的,它们会放在一个一个的小盒子里,在MongoDB中这些盒子就称为集合。一个数据库中可以有多个集合,而集合中存储的是一条一条的数据。

MongoDB简介

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

在现代的计算系统上每天网络上都会产生庞大的数据量。

这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970年 E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。

通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

创建和删除数据库

创建和删除集合

启动方式:测试启动

启动失败:Failed to start mongod.service: Unit mongod.service not found.

生产环境正式的启动方式

启动: sudo mongod [--auth --dbpath=dbpath --logpath=logpath --append --fork] [-–f logfile ]

配置文件启动

sudo mongod -f mogo_start.cfg

 
dbpath=/home/cat/data/db
logpath=/home/cat/data/mongodb.log
logappend=true
fork=true

mongoDB支持的数据类型

mongoDB文档存储是使用BSON类型,BSON(BSON short for Bin­ary JSON, is a bin­ary-en­coded seri­al­iz­a­tion of JSON-like doc­u­ments)是二进制序列化的形式。类如JSON,同样支持内嵌各种类型。

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中

下表为MongoDB 常用的几种数据类型:

数据类型

描述

String

字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。

Integer

整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。

Boolean

布尔值。用于存储布尔值(真/假)。

Double

双精度浮点值。用于存储浮点值。

Array

用于将数组或列表或多个值存储为一个键。

Timestamp

时间戳。记录文档修改或添加的具体时间。

Object

用于内嵌文档。

Null

用于创建空值。

Date

日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。

Object ID

对象 ID。用于创建文档的 ID。  (每个文档都有)

ObjectId

ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:

增删改查

如果文档的_id已经存在则修改,如果_id不存在则添加

1.db.集合名称.find({条件文档})

2.方法findOne():查询,只返回第一个db.集合名称.findOne({条件文档})

3.方法pretty(): 将结果格式化;不能和findOne()一起使用!db.集合名称.find({条件文档}).pretty()

1.等于: 默认是等于判断, 没有运算符

2.小于:$lt (less than)

3.小于等于:$lte (less than equal)

4.大于:$gt (greater than)

5.大于等于:$gte

6.不等于:$ne

1.and:在json中写多个条件即可

2.or:使用$or, 值为数组, 数组中每个元素为json

3.范围运算符:使用$in, $nin 判断数据是否在某个数组内

1.shell 是一个js的执行环境

2.使用$where写一个函数, 返回满足条件的数据

3.db.stu.find({ $where:function() { return this.age + 10>= 18; } })

1.db.集合名称.find({},{字段名称:1,...})

2.参数为字段与值, 值为1表示显示, 值为0不显

3.特别注意:对于_id列默认是显示的, 如果不显示需要明确设置为0对于其他不显示的字段不能设置为0db.stu.find({},{_id:0,name:1,gender:1})

1.参数1为升序排列

2.参数-1为降序排列

3.db.stu.find().sort({score:-1,age:1})

1.db.集合名称.estimated_document_count()

2.db.集合名称.count_documents({条件})

1.参数query:查询条件

2.参数update:更新操作符

3.参数multi:可选,默认是false,表示只更新找到的第一条数据,值为true表示把满足条件的数据全部更新multi参数必须和$set一起使用!

1.参数query:可选,删除的⽂档的条件

2.参数justOne:可选, 如果设为true或1,则只删除一条,默认false,表示删除全部

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>