MongoDB
MongoDB
杨林伟
像火箭科学家一样思考!
展开
-
数据库系列课程(23)-MongoDB 索引
1 概述索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。如果查询存在适当的索引,MongoDB可以使用该索引限制必须检查的文档数。索引是特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。索引存储特定字段或一组字段的值,按字段值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作原创 2020-09-23 17:58:34 · 723 阅读 · 0 评论 -
数据库系列课程(22)-MongoDB 常用命令
1.引言常用命令小结:选择切换数据库:use articledb 插入数据:db.comment.insert({bson数据}) 查询所有数据:db.comment.find(); 条件查询数据:db.comment.find({条件}) 查询符合条件的第一条记录:db.comment.findOne({条件}) 查询符合条件的前几条记录:db.comment.find({条件}).limit(条数) 查询符合条件的跳过的记录:db.comment.find({条件}).ski原创 2020-08-12 14:51:25 · 552 阅读 · 0 评论 -
数据库系列课程(21)-MongoDB应用场景
业务应用场景传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:High performance - 对数据库高并发读写的需求。Huge Storage - 对海量数据的高效率存储和访问的需求。High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。而MongoDB可应对“三高”需求。具体的应用场景如:1)社交场景,使用 MongoDB原创 2020-08-10 19:06:12 · 731 阅读 · 1 评论 -
解决 :MongoDB couldn‘t add user: not authorized on ‘your db‘ to execute command
这个问题主要是mongodb的配置文件开启了授权验证,如果要添加用户可以先暂时关闭。①将mongod.conf配置文件中的authorization置为disabledvi /mongodb/single/mongod.conf②关闭mongodb(直接kill掉进程):ps -elf|grep mongokill -9 199203③启动mongodb:/usr/local/mongodb/bin/mongod -f /mongodb/single/mongod.conf ④连接M原创 2020-07-21 11:57:08 · 13437 阅读 · 0 评论 -
MongoDB配置用户名和密码
01 引言在前面博客已经讲解了MongoDB的安装,有兴趣的同学可以参阅:《Linux下安装MongoDB》,本文讲解如何新增MongoDB用户。02 角色权限角色权限:角色权限数据库用户角色read、readWrite数据库管理角色dbAdmin、dbOwner、userAdmin集群管理角色clusterAdmin、clusterManager、clusterMonitor、hostManager备份恢复角色backup、restore所有数据原创 2020-07-21 10:44:58 · 1924 阅读 · 0 评论 -
微服务技术系列教程(46)-SpringBoot整合MongoDB(文章评论案例)
01 引言本文的代码已上传至Github,有兴趣的同学可以Clone下来看看https://github.com/ylw-github/SpringBoot-Mongo-Demo.git本文主要讲解在SpringBoot下整合MongoDB,实现文章评论的“增”、“删”、“改”、“查”功能,其中文章评论MongoDB的表结构设计如下:专栏文章评论comment字段名称字段含义字段类型备注_idIDObjectId或StringMongo的主键的字段a原创 2020-07-15 16:13:00 · 811 阅读 · 1 评论 -
Linux下安装MongoDB
01 下载下载可以从我的百度网盘下载:链接:https://pan.baidu.com/s/15WGmKuOCOi-0rR5ky8lhvw密码:rmv902 安装① 首先使用SSH工具上传MongoDB安装到Linux服务器:② 解压并剪切到mongodb文件夹:tar -xvf mongodb-linux-x86_64-4.0.10.tgzmv mongodb-linux-x86_64-4.0.10 /usr/local/mongodb③ 新建几个目录,分别用来存储数据和日志:原创 2020-07-15 14:59:51 · 648 阅读 · 0 评论 -
23 MongoDB高级 - 与python交互
1.安装python包进入虚拟环境sudo pip install pymongo或源码安装python setup.py2.引入包pymongoimport pymongo3.连接,创建客户端client=pymongo.MongoClient("localhost", 27017)4.获得数据库test1db=client.test15.获得集合stustu =...原创 2019-08-26 19:21:37 · 304 阅读 · 0 评论 -
22 MongoDB高级 - 备份与恢复
备份语法mongodump -h dbhost -d dbname -o dbdirectoryh:服务器地址,也可以指定端口号d:需要备份的数据库名称o:备份的数据存放位置,此目录中存放着备份出来的数据例:sudo mkdir test1baksudo mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test...原创 2019-08-26 19:18:03 · 249 阅读 · 0 评论 -
21 MongoDB高级 - 复制(副本集)
什么是复制复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性复制还允许从硬件故障和服务中断中恢复数据为什么要复制数据备份数据灾难恢复读写分离高(24* 7)数据可用性无宕机维护副本集对应用程序是透明复制的工作原理复制至少需要两个节点A、B…A是主节点,负责处理客户端请求其余的都是从节点,负责复制主节点上的数据节点...原创 2019-08-26 19:15:34 · 245 阅读 · 0 评论 -
20 MongoDB高级 - 用户管理安全
超级管理员为了更安全的访问mongodb,需要访问者提供用户名和密码,于是需要在mongodb中创建用户采用了角色-用户-数据库的安全管理方式常用系统角色如下:root:只在admin数据库中可用,超级账号,超级权限Read:允许用户读取指定数据库readWrite:允许用户读写指定数据库创建超级管理用户use admindb.createUser({ user:'a...原创 2019-08-26 18:52:52 · 307 阅读 · 0 评论 -
19 MongoDB高级 - $unwind
将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。语法1对某字段值进行拆分db.集合名称.aggregate([{$unwind:'$字段名称'}])构造数据db.t2.insert({_id:1,item:'t-shirt',size:['S','M','L']})查询db.t2.aggregate([{$unwind:'$size'}])语法2对某字段值进...原创 2019-08-26 18:42:10 · 1399 阅读 · 0 评论 -
18 MongoDB高级 - $limit和$skip
$limit限制聚合管道返回的文档数例1:查询2条学生信息db.stu.aggregate([{$limit:2}])$skip跳过指定数量的文档,并返回余下的文档例2:查询从第3条开始的学生信息db.stu.aggregate([{$skip:2}])例3:统计男生、女生人数,按人数升序,取第二条数据db.stu.aggregate([ {$group:{_id:'...原创 2019-08-26 18:40:10 · 662 阅读 · 2 评论 -
17 MongoDB高级 - $sort
将输入文档排序后输出例1:查询学生信息,按年龄升序b.stu.aggregate([{$sort:{age:1}}])例2:查询男生、女生人数,按人数降序db.stu.aggregate([ {$group:{_id:'$gender',counter:{$sum:1}}}, {$sort:{counter:-1}}])...原创 2019-08-26 18:38:44 · 622 阅读 · 0 评论 -
16 MongoDB高级 - $project
修改输入文档的结构,如重命名、增加、删除字段、创建计算结果。例1:查询学生的姓名、年龄db.stu.aggregate([ {$project:{_id:0,name:1,age:1}}])例2:查询男生、女生人数,输出人数db.stu.aggregate([ {$group:{_id:'$gender',counter:{$sum:1}}}, {$projec...原创 2019-08-26 18:37:56 · 473 阅读 · 0 评论 -
15 MongoDB高级 - $match
用于过滤数据,只输出符合条件的文档例1:查询年龄大于20的学生db.stu.aggregate([ {$match:{age:{$gt:20}}}])例2:查询年龄大于20的男生、女生人数db.stu.aggregate([ {$match:{age:{$gt:20}}}, {$group:{_id:'$gender',counter:{$sum:1}}}])...原创 2019-08-26 18:36:52 · 532 阅读 · 0 评论 -
14 MongoDB高级 - $group
将集合中的文档分组,可用于统计结果_id表示分组的依据,使用某个字段的格式为'$字段'例1:统计男生、女生的总人数db.stu.aggregate([ {$group: { _id:'$gender', counter:{$sum:1} } }])Group by null将集合中所有文档...原创 2019-08-26 18:35:16 · 323 阅读 · 0 评论 -
13 MongoDB高级 - 聚合 aggregate
聚合(aggregate)主要用于计算数据,类似sql中的sum()、avg()语法:db.集合名称.aggregate([{管道:{表达式}}])管道管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的输入ps ajx | grep mongo在mongodb中,管道具有同样的作用,文档处理完毕后,通过管道进行下一次处理。常用管道:$group:将集合中...原创 2019-08-26 18:33:04 · 385 阅读 · 0 评论 -
12 MongoDB - 数据查询(消除重复)
方法distinct()对数据进行去重语法:db.集合名称.distinct('去重字段',{条件})例1:查找年龄大于18的性别(去重)db.stu.distinct('gender',{age:{$gt:18}})原创 2019-08-26 18:28:26 · 949 阅读 · 0 评论 -
11 MongoDB - 数据查询(统计个数)
方法count()用于统计结果集中文档条数语法:db.集合名称.find({条件}).count()也可以与为db.集合名称.count({条件})例1:统计男生人数db.stu.find({gender:1}).count()例2:统计年龄大于20的男生人数db.stu.count({age:{$gt:20},gender:1})...原创 2019-08-26 18:27:29 · 34418 阅读 · 2 评论 -
10 MongoDB - 数据查询(排序)
方法sort(),用于对结果集进行排序语法:db.集合名称.find().sort({字段:1,...})参数1为升序排列参数-1为降序排列例1:根据性别降序,再根据年龄升序db.stu.find().sort({gender:-1,age:1})...原创 2019-08-26 18:26:18 · 707 阅读 · 0 评论 -
09 MongoDB - 数据查询(投影)
在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段。如:一个文档有5个字段,需要显示只有3个,投影其中3个字段即可。语法:参数为字段与值,值为1表示显示,值为0不显示。db.集合名称.find({},{字段名称:1,...})对于需要显示的字段,设置为1即可,不设置即为不显示特殊:对于_id列默认是显示的,如果不显示需要明确设置为0例1:db.stu.find({...原创 2019-08-26 18:25:14 · 638 阅读 · 0 评论 -
08 MongoDB - 数据查询(Limit 与 Skip)
1.Limit方法limit():用于读取指定数量的文档语法:db.集合名称.find().limit(NUMBER)参数NUMBER表示要获取文档的条数如果没有指定参数则显示集合中的所有文档例1:查询2条学生信息db.stu.find().limit(2)2.skip方法skip():用于跳过指定数量的文档语法:db.集合名称.find().skip(NUMBER)...原创 2019-08-26 16:47:56 · 353 阅读 · 0 评论 -
07 MongoDB - 数据查询
1.基本查询方法find():查询db.集合名称.find({条件文档})方法findOne():查询,只返回第一个db.集合名称.findOne({条件文档})方法pretty():将结果格式化db.集合名称.find({条件文档}).pretty()2.比较运算符等于,默认是等于判断,没有运算符小于$lt小于或等于$lte大于$gt大于或等于$gte不等于$n...原创 2019-08-26 10:07:45 · 261 阅读 · 0 评论 -
06 MongoDB - 数据操作
1.插入语法:db.集合名称.insert(document)插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId。例1:db.stu.insert({name:'gj',gender:1})例2:s1={_id:'20160101',name:'hr'}s1.gender=0db.stu.insert(s1)2.简单查询语法:db....原创 2019-08-26 09:59:53 · 318 阅读 · 0 评论 -
05 MongoDB - 数据类型
下表为MongoDB中常用的几种数据类型:数据类型描述Object ID文档IDString字符串,最常用,必须是有效的UTF-8Boolean存储一个布尔值,true或falseInteger整数可以是32位或64位,这取决于服务器Double存储浮点值Arrays数组或列表,多个值存储到一个键Object用于嵌入式的文档,...原创 2019-08-26 09:48:15 · 349 阅读 · 0 评论 -
04 MongoDB - 集合操作
1.集合创建语法:db.createCollection(name, options)name是要创建的集合的名称options是一个文档,用于指定集合的配置选项参数是可选的,所以只需要到指定的集合名称。以下是可以使用的选项列表:---- 例1:不限制集合大小db.createCollection("stu")---- 例2:限制集合大小,后面学会插入语句后可以查看效果...原创 2019-08-26 09:42:45 · 268 阅读 · 0 评论 -
03 MongoDB - 数据库操作
1.查看当前数据库名称db2.查看所有数据库名称列出所有在物理上存在的数据库show dbs3.切换数据库如果数据库不存在,则指向数据库,但不创建,直到插入数据或创建集合时数据库才被创建use 数据库名称4.默认的数据库为test,如果你没有创建新的数据库,集合将存放在test数据库中5.删除当前指向的数据库如果数据库不存在,则什么也不做db.dropDatabase(...原创 2019-08-26 09:38:25 · 288 阅读 · 0 评论 -
02 MongoDB - 基本操作
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB的文档类似于JSON对象,字段值可以包含其他文档、数组、文档数组。三元素:数据库,集合,文档集合就是关系数据库中的表文档对应着关系数据库中的行文档:就是一个对象,由键值对构成,是json的扩展Bson形式{'name':'guojing','gender':'男'}集合:类似于...原创 2019-08-21 15:40:34 · 283 阅读 · 0 评论 -
01 MongoDB - 简介
简介MongoDB 是一个基于分布式 文件存储的NoSQL数据库由C++语言编写,运行稳定,性能高旨在为 WEB 应用提供可扩展的高性能数据存储解决方案详情查看官方网站MongoDB特点模式自由 :可以把不同结构的文档存储在同一个数据库里面向集合的存储:适合存储 JSON风格文件的形式完整的索引支持:对任何属性可索引复制和高可用性:支持服务器之间的数据复制,支...原创 2019-08-21 15:36:41 · 358 阅读 · 0 评论