目录
- 1、数据库的简单增删改查操作。
- 2、数据库多条件查询,如$or,$and,$in函数等
- 3、MongoDB中聚合(aggregate)
- 4、MongoDB的limit和skip方法,sort排序。
- 5、MongoDB创建索引。
- 6、Java操作MongoDB数据库的简单操作。
- 7、MongoDB的关系:
- 8、使用覆盖索引查询,能提高查询效率。
- 9、查询分析:
- 10、高级索引:
- 11、索引限制:
- 12、MongoDB的ObjectId
- 13、Mongodb的Map-Reduce
- 14、全文检索
- 15、Mongodb可以使用正则表达式:
- 16、MongoDB 固定集合(Capped Collections):
- 17、关于主键自增长:
- 18、CAP定理:
- 19、与其他软件相似,MongoDB也存在缺陷
- 最后
1、数据库的简单增删改查操作。
简单的增删改查语句
2、数据库多条件查询,如 o r , or, or,and,$in函数等
3、MongoDB中聚合(aggregate)
主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*):
下面展示了一些聚合的表达式:
s
u
m
,
sum,
sum,avg,
m
i
n
,
min,
min,max,
p
u
s
h
,
push,
push,addToSet,
f
i
r
s
t
,
first,
first,last…
实例:
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
4、MongoDB的limit和skip方法,sort排序。
5、MongoDB创建索引。
6、Java操作MongoDB数据库的简单操作。
主要代码示例:
//链接数据库
MongoClient mongoClient = new MongoClient("172.16.40.1:27701");
MongoDatabase db = mongoClient.getDatabase("beehive");
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "beehive");//定位到库
Query query = Query.query(Criteria.where("_id").regex(jsonArray.getString(i)));
List<Document> seedList = mongoTemplate.find(query, Document.class, "_sys_seed");
//抓取源在_sys_seed中只有一条数据,若没有查询到则为非抓取源id
Document document = seedList.get(0);
7、MongoDB的关系:
1:1 (1对1)
1: N (1对多)
N: 1 (多对1)
N: N (多对多)
嵌入式关系,引用式关系。
8、使用覆盖索引查询,能提高查询效率。
9、查询分析:
MongoDB查询分析的常用函数:explain() 和 hint()。
10、高级索引:
MongoDB可以对集合中的数组创建索引,也可以对数据中的子文档创建索引。
11、索引限制:
建立索引需要占据一定的存储空间,索引建立是有限制的;如果用了正则表达式及非操作符,如 $nin, $not, 等,以及算术运算符,如 m o d , 等 , mod, 等, mod,等,where 子句,那么索引是不会被使用的,可以用explain来查看是否使用索引,是个好习惯。
12、MongoDB的ObjectId
代表文档唯一的值,格式如下:
前4个字节表示时间戳
接下来的3个字节是机器标识码
紧接的两个字节由进程id组成(PID)
最后三个字节是随机数。
MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个 服务器上同步自动增加主键值既费力还费时。
13、Mongodb的Map-Reduce
案例格式如下:
db.getCollection('Student').mapReduce(
function(){emit(this.Name,this.age);},
function(key,values){return Array.sum(values)},
{
query:{State:1},
// out:"post_total" //输出到指定集合,没有就会创建
out: { inline: 1 }//这种可以不指定集合,在运行内容中,但只能在单个文档不超过16MB的情况下
sort: document,//和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
limit: number //发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)
}
).find()
也可以后面不加find函数,查看结果
14、全文检索
全文检索对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。
这个过程类似于通过字典中的检索字表查字的过程。使用全文索引可以提高搜索效率。
15、Mongodb可以使用正则表达式:
db.posts.find({post_text:{$regex:"runoob"}})
16、MongoDB 固定集合(Capped Collections):
是性能出色且有着固定大小的集合,对于大小固定,我们可以想象其就像一个环形队列,当集合空间用完后,再插入的元素就会覆盖最初始的头部的元素!
对插入数据和按插入顺序的查询速度都极快,一般用于存储日志信息和缓存一些少量的文档。
17、关于主键自增长:
Mongodb像mysql那样的自增长,它的_id是系统自动生成的12字节唯一标识,但可以通过编程的方式实现自增长的效果。
18、CAP定理:
它指出多于分布式计算机系统来说,不可能同时满足以下三点:
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。
因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
RDBMS–>CA
MongoDB,HBase,Redis–>CP
CouchDB,Cassandra -->AP
19、与其他软件相似,MongoDB也存在缺陷
经过一段时间使用MongoDB,我列举经历过并需要注意的一些事情,我成为“Gotchas”:
● 不要按照关系型数据库来思考。这很明显,MongoDB使得构建和执行复杂查询变得非常容易。当实际使用的时候,你会主要关注于效率问题(像我一样)。
● MongoDB的索引是二进制的树。如果你不是很熟悉B-tree,可能需要了解一下。这些都涉及到构建符合提供查询条件需求的建立索引的方式。
● 小心的设计索引结构。这涉及到上面提到的B-tree。刚开始我的索引包含文档中的很多
字段,以防我会使用到他们。不要犯同样的错误。我有一个很小集合的索引(大约1千万记录)增长到超过17GB的空间,比集合本身还大。你应该不会想要索引一个包含成百上千个实体的列表字段。
● MongoDB采用了非常有意思的方式来实现NoSQL:采用BSON作为存储,JSON作为展示,JavaScript用于管理和Map/Reduce。因此也引起了一些小问题比如这个 (破坏了Number和Long的相等操作),在MongoDB逐渐流行之后,可能会不断的展示出来。
最后
同样的知识学习一次是记不住,只有反复去看才能慢慢了解它。欢迎大家对本文中错误的和不足的地方提出来,谢谢!