MongoDB
Posted 刘小鹿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB相关的知识,希望对你有一定的参考价值。
一:MongoDB简介
MongoDB是一个面向文档的数据库,而不是关系型数据库。具有更好的扩展性,MongoDB从一开始设计的时候就是奔着分布式去的,只需要简单的配置就可以实现高效的分布式存储,被大量的运用于大数据领域。并且MongoDB不再有预定义模式:文档的键(key)和值(value)不再是固定的类型和大小。
二:MongoDB与其他类型数据库的比较
1.MongoDB与mysql:MongoDB是非关系型数据库,数据量大。而MySQL是关系型数据库,基于硬盘存储的,当并发量过大的时候,mysql可能无法支撑。
2.MongoDB与Redis:MongoDB是最像关系型的非关系型数据库,更加适用于大数据。而Redis更倾向于并发较小,数据较小,性能更高。
三:安装
1: 4.0下载地址https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.8-signed.msi
2:安装时去除多余的组件安装提高速度
启动MongoDB,默认端口好(27017)
三:MongoDB的使用
1.首先将MongoDB的安装文件夹下的bin目录添加到环境变量里面
2.打开cmd,输入mongo
3.开启用户验证
3.1在配置环境中配置安全认证
key都是固定的不能随便写,每一个key都有特殊含义。其中 {"role":"root"} role固定的key root是角色的名字 有可选范围如root readWrite read等。
exit退出cmd后,重启服务:
4. 登录
方式一:账号密码
方式二:游客
四:库的操作
use 数据库名称 ---->创建数据库 db.dropDatabase ---->删除数据库 show dbs ---->查看所有数据库 use ---->切换数据,如果不存在会自动创建,新建的数据库是查看不到的,因为里面没有数据
#创建数据库: use 数据库名称 #如果有则切换没有则创建新的,注意的是如果如果库中没有数据show dbs 中则不显示! # 查看数据库: show dbs #删除 db.dropDatabase() #注意区分大小写
五:集合的操作
集合是一个存储数据类型的容器类比mysql中的表
#创建集合: db.user #查看集合: show collections show tables # 同样的数据集合中没有数据则 不会显示 # 一下数据库之间没有任何关系仅仅是名字有相同部分 数据之间的关系需要应用程序维护 db.blog db.blog.user db.blog.common #删除集合: db.blog.user.drop()
六:基本数据类型
2、这样有很多好处:易于理解、易于解析、易于记忆。然而从另一方面说,因为只有null、布尔、数字、字符串、数字和对象这几种数据类型,所以JSON的表达能力有一定的局限。
3、虽然JSON具备的这些类型已经具有很强的表现力,但绝大数应用(尤其是在于数据库打交道时)都还需要其他一些重要的类型。例如,JSON没有日期类型,这使得原本容易日期处理变得烦人。另外,JSON只有一种数字类型,无法区分浮点数和整数,更别区分32位和64位了。再者JSON无法表示其他一些通用类型,如正则表达式或函数。
4、MongoDB在保留了JSON基本键/值对特性的基础上,添加了其他一些数据类型。在不同的编程语言下,这些类型的确切表示有些许差异。下面说明了MongoDB支持的其他通用类型,以及如何正在文档中使用它们
#1、null:用于表示空或不存在的字段 d={\'x\':null} #2、布尔型:true和false d={\'x\':true,\'y\':false} #3、数值 d={\'x\':3,\'y\':3.1415926} #4、字符串 d={\'x\':\'egon\'} #5、日期 d={\'x\':new Date()} d.x.getHours() #6、正则表达式 d={\'pattern\':/^egon.*?nb$/i} 正则写在//内,后面的i代表模式,可省略: i 忽略大小写 m 多行匹配模式 x 忽略非转义的空白字符 s 单行匹配模式 #7、数组 d={\'x\':[1,\'a\',\'v\']} #8、内嵌文档 user={\'name\':\'jerry\',\'addr\':{\'country\':\'China\',\'city\':\'YT\'}} user.addr.country #9、对象id:是一个12字节的ID,是文档的唯一标识,不可变 d={\'x\':ObjectId()} #案例: db.tb.insert({"a":null,"b":1.1,"c":true,"d":100,"e":"aaaaaa","f":new Date(),"g":/^jerry.*nice$/i,"h":[1,2],"j":{"name":"smallJerry"}}) db.tb.find() db.tb.find().pretty() # 格式化显示
七:查询数据
=============================比较运算============================= find 查找所有匹配数据 findOne 查找第一个匹配的 # SQL:=,!=,>,<,>=,<= # MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有数据类型
> < != >= <=
gt lt ne gte lte
find 查找所有匹配数据 findOne 查找第一个匹配的 #1、select * from db1.user where name = "cxx"; db.user.find({\'name\':\'cxx\'}) #2、select * from db1.user where name != "cxx"; db.user.find({\'name\':{"$ne":\'cxx\'}}) #3、select * from db1.user where id > 2; db.user.find({\'_id\':{\'$gt\':2}}) #4、select * from db1.user where id < 3; db.user.find({\'_id\':{\'$lt\':3}}) #5、select * from db1.user where id >= 2; db.user.find({"_id":{"$gte":2,}}) #6、select * from db1.user where id <= 2; db.user.find({"_id":{"$lte":2}})
=============================逻辑运算============================= # SQL:and,or,not # MongoDB:字典中逗号分隔的多个条件是and关系,"$or"的条件放到[]内,"$not" #1、select * from db1.user where id >= 2 and id < 4; db.user.find({\'_id\':{"$gte":2,"$lt":4}}) #2、select * from db1.user where id >= 2 and age < 40; db.user.find({"_id":{"$gte":2},"age":{"$lt":40}}) #3、select * from db1.user where id >= 5 or name = "cxx"; db.user.find({ "$or":[ {\'_id\':{"$gte":5}}, {"name":"cxx"} ] }) #4、select * from db1.user where id % 2=1;(除2余1) db.user.find({\'_id\':{"$mod":[2,1]}}) #5、上题,取反 db.user.find({\'_id\':{"$not":{"$mod":[2,1]}}})
=============================成员运算============================= # SQL:in,not in # MongoDB:"$in","$nin" #1、select * from db1.user where age in (20,30,31); db.user.find({"age":{"$in":[20,30,31]}}) #2、select * from db1.user where name not in (\'alex\',\'yuanhao\'); db.user.find({"name":{"$nin":[\'alex\',\'yuanhao\']}})
以上是关于MongoDB的主要内容,如果未能解决你的问题,请参考以下文章
ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项
在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects