关于Mongodb的其他知识
Mongodb支持的数据类型
| 数据类型 | 描述 |
|---|---|
| String | 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
| Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
| Boolean | 布尔值。用于存储布尔值(真/假)。 |
| Double | 双精度浮点值。用于存储浮点值。 |
| Min/Max keys | 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 |
| Arrays | 用于将数组或列表或多个值存储为一个键。 |
| Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
| Object | 用于内嵌文档。 |
| Null | 用于创建空值。 |
| Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
| Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
| Object ID | 对象 ID。用于创建文档的 ID。 |
| Binary Data | 二进制数据。用于存储二进制数据。 |
| Code | 代码类型。用于在文档中存储 JavaScript 代码。 |
| Regular expression | 正则表达式类型。用于存储正则表达式。 |
Mongodb可以储存的数据可以大于内存大小,Mongodb自身保证热点数据在内存中,当发现要操作的数据不在内存中的时候,Mongodb会去硬盘中加载。
Mongodb支持全文搜索和地理空间查询。
Mongodb全文检索
- //插入测试数据 有列name和description
- > db.stores.insert(
- ... [
- ... { _id: 1, name: "Java Hut", description: "Coffee and cakes" },
- ... { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" },
- ... { _id: 3, name: "Coffee Shop", description: "Just coffee" },
- ... { _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" },
- ... { _id: 5, name: "Java Shopping", description: "Indonesian goods" }
- ... ]
- ... )
- BulkWriteResult({
- "writeErrors" : [ ],
- "writeConcernErrors" : [ ],
- "nInserted" : 5,
- "nUpserted" : 0,
- "nMatched" : 0,
- "nModified" : 0,
- "nRemoved" : 0,
- "upserted" : [ ]
- })
- //在stores上建立所以 包含name列和description都是文本
- > db.stores.createIndex( { name: "text", description: "text" } )
- {
- "createdCollectionAutomatically" : false,
- "numIndexesBefore" : 1,
- "numIndexesAfter" : 2,
- "ok" : 1
- }
- //执行全文检索 会将关键字分词 然后匹配结果还可以 由于数据量小 速度就测不出来了
- > db.stores.find( { $text: { $search: "java coffee shop" } } )
- { "_id" : 3, "name" : "Coffee Shop", "description" : "Just coffee" }
- { "_id" : 1, "name" : "Java Hut", "description" : "Coffee and cakes" }
- { "_id" : 5, "name" : "Java Shopping", "description" : "Indonesian goods" }
优势:实时的全文检索。
不知道性能如何,不支持高亮这种展示,只有在3.2+的版本才支持中文分词。
大致了解下,暂时不会用到,以后用到可以详细看手册:
https://docs.mongodb.com/manual/text-search/
当前最新的版的Mongdb3.4开始支持创建视图(view)。
Capped collections是大小固定的collection,它们支持基于插入顺序插入和检索文档的高吞吐量操作。 覆盖的集合以类似于循环缓冲区的方式工作:一旦集合填充其分配的空间,它将通过覆盖集合中最旧的文档来为新文档腾出空间。
db.createCollection(name, options)方法:
因为MongoDB在集合首次在命令中引用时隐式创建集合,所以此方法主要用于创建使用特定选项的新集合。 例如,您使用db.createCollection()创建一个Capped collections,或者创建一个使用文档验证的新集合。 db.createCollection()也用于为普通集合预分配空间。
- db.createCollection(<name>, { capped: <boolean>,
- autoIndexId: <boolean>,
- size: <number>,
- max: <number>,
- storageEngine: <document>,
- validator: <document>,
- validationLevel: <string>,
- validationAction: <string>,
- indexOptionDefaults: <document>,
- viewOn: <string>,
- pipeline: <pipeline>,
- collation: <document> } )
capped:是否Capped collections。
size:可选的。为Capped collections指定最大大小(以字节为单位)。一旦限制集合达到其最大大小,MongoDB将删除较旧的文档,为新文档腾出空间。 size字段是封顶集合所必需的,而对于其他集合则被忽略。
max:可选的。Capped collections中允许的最大文档数。Size限制优先于此限制。如果上限集合达到最大数量的文档之前达到Size限制,MongoDB将删除旧文档。如果您希望使用最大限制,请确保限制集合所需的大小限制足以包含最大数量的文档。
validator: 可选的。允许用户为集合指定验证规则或表达式。版本3.2中的新功能。
TTL集合
通过创建TTL索引,就构建了一个TTL集合,索引建立的原则:
- 索引字段必须为时间类型
建立语句:
db.ttl_test.ensureIndex({“time”:1},{expireAfterSeconds:20}})
设置其为20s后删除数据,真实情况下可能并不能精确到20s.
单个文档大小的限制:
在Mongodb2.0和之后的版本中,单个文档大小的限制为16MB。Mongodb这么设计主要是出于性能的考虑,因为查询单个文档返回给客户端之前要把整个文档拷贝到缓存中,这个拷贝工作非常昂贵。
Mongodb文档的嵌套深度最大值限制是100。
MongoDB将会把不存在的字段当做一个空的BSON对象。这样的话,对文档 { } 和 { a: null } 在 a字段上进行排序,在排序顺序上将会看做相等。
字段名_id保留用作主键; 其值在集合中必须是唯一的,是不可变的,并且可以是除数组之外的任何类型。
存储引擎是负责管理数据的MongoDB的主要组件。 MongoDB提供各种存储引擎,允许您选择最适合您的应用程序。
journal日志可帮助数据库在严重关闭的情况下恢复。 有几个可配置的选项可以使日志在性能和可靠性之间取得平衡,这对您的特定用例有效。
GridFS 是一个通用的存储系统用来处理大文件,例如那些超过16MB文档大小限制的文件。
Mongodb的持久化:
Mongodb在内存中的文件有两种:
数据文件和journal日志。
数据文件没60同步到硬盘一次。
journal日志用于记录Write ahead log,用于出错恢复。所以journal日志一般只需要存储60秒的内容就够了。
journal日志每100ms同步到硬盘一次。可以设置为更低,不过性能就下降了。
设置命令:db.adminCommand({"setParameter" : 1, "journalCommitInterval" : 10})
存储引擎:
存储引擎是数据库的组件,负责管理数据在内存和磁盘上的存储方式。
存储引擎(Storage Engine)是MongoDB的核心组件,负责管理数据如何存储在硬盘(Disk)和内存(Memory)上。从MongoDB 3.2 版本开始,MongoDB 支持多数据存储引擎(Storage Engine),MongoDB支持的存储引擎有:WiredTiger,MMAPv1和In-Memory。
MongoDB支持多个存储引擎,因为不同的引擎对于特定的工作负载更好。为您的用例选择适当的存储引擎可能会显着影响应用程序的性能。
WiredTiger是从MongoDB 3.2开始的默认存储引擎。它非常适合大多数工作负载,建议用于新的部署。 WiredTiger提供文档级并发模型,检查点和压缩等功能。在MongoDB Enterprise中,WiredTiger还支持在Rest中进行加密。
MMAPv1是原始的MongoDB存储引擎,是3.2之前的MongoDB版本的默认存储引擎。它在具有大量读取和写入的工作负载以及就地更新方面表现良好。MMAPv1有一个缺陷,随着数据的增长,它会消耗大量的磁盘空间。原因是它使用内存映射文件的方式来管理内存:内存映射文件,是由一个文件到一块内存的映射。Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而且在对该文件进行操作之前必须首先对文件进行映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。
在3.0版本之后,MMAPv1可以支持集合级别的锁。但是不支持文档级别的锁。
内存存储引擎在MongoDB Enterprise中可用。它不是将文档存储在磁盘上,而是将它们保留在内存中,以实现更可预测的数据延迟。
WiredTiger存储引擎:
从MongoDB 3.0开始,WiredTiger存储引擎在64位版本中可用。
在3.2版本更改:WiredTiger存储引擎是从MongoDB 3.2开始的默认存储引擎。 这是我们为什么使用3.2版本的原因。WiredTiger已经很成熟了。
Spring的接口:



//一个根据名字查询结果的方法
@Override
public List<Student> getByName(String name) {
List<Student> students = new ArrayList<Student>();
Query query = new Query();
query.addCriteria(new Criteria("name").is(name));
students = this.mongoTemplate.find(query, Student.class);
return students;
}
////一个根据名字更新数据方法
@Override
public int updateByName(String name) {
int n = 0;
List<Student> students = new ArrayList<Student>();
Query query = new Query();
query.addCriteria(new Criteria("name").is(name));
Update update = new Update();
update.set("name", "xhj");
WriteResult result = this.mongoTemplate.updateMulti(query, update, Student.class);
n = result.getN();
return n;
}
关于Mongodb的其他知识的更多相关文章
- MongoDB的基础知识
本人只是软件开发的一个菜鸟,在学习MongoDB,总结了一点自己学习的知识,监督自己学习. 如果文章中有不足的地方,还请大神指点迷津,纠正改错,谢谢. 一.MongoDB简介 MongoDB是一个基于 ...
- MongoDB 索引相关知识
背景: MongoDB和MySQL一样,都会产生慢查询,所以都需要对其进行优化:包括创建索引.重构查询等.现在就说明在MongoDB下的索引相关知识点,可以通过这篇文章MongoDB 查询优化分析了解 ...
- 二、MongoDB的基础知识简介
1.文档.集合和数据库 a).文档:因为MongoDB是面向文档的数据库,那么可想而知文档是它的基本单元,相当于关系型数据库中的行! Ⅰ.它是由键值对组成的一个有序集:注:键不能为空且是字符串类型的. ...
- MongoDB CRUD 基础知识
建立一个良好的发展环境 环境win8 x64,下载并安装省略.经mongodb 的bin文件夹增加windows的path中,为以后使用方便. c盘新建存储目录:c:/data/db 执行服务:WIN ...
- 数据库与缓存:3.mongodb的基本知识
1. mongodb是什么? NoSQL 非关系型数据库,主要用于数据的海量存储.分为server数据存储端和client数据操作端. 1.1 关系型与非关系型数据库的区别? 1.sql:数据库--表 ...
- [MongoDB知识体系] 一文全面总结MongoDB知识体系
MongoDB教程 - Mongo知识体系详解 本系列将给大家构建MongoDB全局知识体系.@pdai MongoDB教程 - Mongo知识体系详解 知识体系 学习要点 学习资料 官网资料 入门系 ...
- MongoDB(五)mongo语法和mysql语法对比学习
我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与MySQL命令对比 关系型数据库一般是由数据库(datab ...
- mongoDB 读书笔记(初级命令)
关于mongoDB的相关知识,读书笔记,便于自己查阅用,不定期更新(纯手打) <mongoDB权威指南> 一.创建更新和删除 1.创建 //批量插入一个集合可以节省时间,只用 ...
- 四、MongoDB的查询
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 db.blogs.insert([ { "author": " ...
随机推荐
- C语言基础:汉诺塔(递归方法)
分析:当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上.当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C ...
- Python爬虫学习==>第十章:使用Requests+正则表达式爬取猫眼电影
学习目的: 通过一个一个简单的爬虫应用,初窥门径. 正式步骤 Step1:流程框架 抓取单页内容:利用requests请求目标站点,得到单个页面的html代码,返回结果: 正则表达式分析:根据html ...
- 【并行计算-CUDA开发】FPGA 设计者应该学习 OpenCL及爱上OpenCL的十个理由
为什么要学习OpenCL呢?就目前我所从事的医疗超声领域,超声前端的信号处理器一般是通过FPGA或FPGA+DSP来设计的,高端设备用的是FPGA+ GPU架构.传统的设计方法是通过HDL语言来进行设 ...
- SpringBoot配置文件值植入
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐> <dependency> <groupId>org.springframework.boot</ ...
- PTA(Basic Level)1014.福尔摩斯的约会 && PTA(Advanced Level)1061.Dating
大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就明白了,字条上奇 ...
- 第二大矩阵面积--(stack)牛客多校第二场-- Second Large Rectangle
题意: 给你一幅图,问你第二大矩形面积是多少. 思路: 直接一行行跑stack求最大矩阵面积的经典算法,不断更新第二大矩形面积,注意第二大矩形可能在第一大矩形里面. #define IOS ios_b ...
- SKCTF管理系统
一开始是一个简洁风的登录界面 康康注册界面 嗯...也是很简洁风呢. 那让我们来查看元素(fn+f12) 没有什么有flag的迹象呢! 那我们试一下注册一个账号 这时候我们已经有解题的线索了: 获得管 ...
- 使用Python的文本挖掘的特征选择/提取
在文本挖掘与文本分类的有关问题中,文本最初始的数据是将文档表示成向量空间模型的一个矩阵,而这个矩阵所拥有的就是不同的词,常采用特征选择方法.原因是文本的特征一般都是单词(term),具有语义信息,使用 ...
- javascript原型与原型链个人理解
想了解原型和原型链,我觉得首先我们得知道javascript里有一个Object 与 Function,它俩都是构造函数,当然函数也是一个对象.我们打印Object 与 Function看一下, co ...
- 第六篇 CSS样式 背景、背景图、文本、链接
元素背景.文本(字体)样式.链接 这里我们只学习常用的一些,更多的扩展就要同学们自己去了解,或者下方评论. 这里我们为了简便,用的是CSS的内嵌形式. 元素背景: 我们写模块的时候,有的时候为了区 ...