MongoDB理论

目录

    • 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, orand,$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 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逐渐流行之后,可能会不断的展示出来。

最后

同样的知识学习一次是记不住,只有反复去看才能慢慢了解它。欢迎大家对本文中错误的和不足的地方提出来,谢谢!

你可能感兴趣的:(MongoDB理论)