在 【MongoDB基础篇——走进非关系型数据库mongoDB】和【MongoDB应用篇——面向集合的数据库操作】中,初步介绍了非关系型数据库MongoDB的基本结构和传统关系型数据库的区别,以及数据库的增删改查操作。
本文将进一步介绍MongoDB的特点,深入了解面向集合操作的数据库增删改查。
结合传统关系型数据库,我们从以下四个方面再度深入认识NoSQL数据库,以MongoDB为代表
1、事务:
传统关系型数据库严格遵循数据库事务的四个特性ACID,在NoSQL数据库中,不一定遵循传统数据库的一些基本要求;在而MongoDB 3.2在2015MongoDB分享会上MongoDB开发团队提出,目前MongoDB主要把分为两块,传统关系型和NoSQL,这表明MongoDB除了拥有传统DB丰富查询语言、强一致性、丰富的索引之外,还囊括了NoSQL高度灵活、高扩展、高性能的特点。
2、分布式存储:
传统数据库库存储数据特点是将数据记录统一存放在DB表中,同文件存储的特点一样,最终均面临一个数据容量和读取速度的问题。NoSQL数据库是以分布式进行存储,通过存储数据节点,各节点依次向下延伸,减轻了单个数据库存储压力。MongoDB作为典型的NoSQL数据库,自然也许有分布式存储的特点
3、水平可扩展
正是由于NoSQL数据库分布式存储的特点,也使得原本需要通过扩充磁盘容量以增加数据库存储量的扩展方式,NoSQL数据库便可通过节点水平扩张,增加节点存储的数量来扩大数据存储量。
4、读写快速
NoSQL 数据库通过key-value形式存储数据,相对于传统数据库在查找读写时通常遍历整张表而言,以键值对存储数据提高了对数据库的读写速度。
MongoDB 我们称之为NoSQL数据库,也不时看到这样的说法“MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品”,之所以这样对MongoDB 进行描述,原因在于它对数据库操作在事务等方面又贴近于关系型数据库特点,而本身又具备非关系型数据块灵活、分布式的特点。数据库操作语法跟js面向对象的查询语句很相似。这在之前的博客中有初步介绍。现在通过详细介绍MongoDB 的数据库操作语句,体会MongoDB 的特性。
查询
1、$in和$nin
类似于关系型数据库中in关键字
2、$or和$nor
3、$size
专门用于查询指定长度的数据记录
4、正则表达式
MongoDB的查询语句跟js语法很像,同样也可以通过正则表达式进行数据查询
5、游标
通过游标.hasNext(),返回true即下一条记录不为空,才开始查找下一条记录,而不是全部一次性将所有符合条件的记录都查出来。
6、Distinct
7、null
查询出某记录为空或者该记录不存在的数据
更新
更新语句含有以下四个参数控制更新范围和记录
Db.collection.update(A,B,C,D)
A:筛选条件
B:更新内容
C:更新或插入
D:如果有多条记录是否全部更新
例如:
Db.testImage.update({name:“user1”,{sex:male}});
将testImage集合中name=user1这条记录的sex属性更新为male;默认第三个参数(更新或插入)值为true,意思是:如果该条记录存在,如已经有了一条({name:”user1”}{sex:”famale”})则直接更新sex属性,如果是攒在name为user1的记录,但sex属性为空,则直接加上该属性即可。
插入:Insert
这一注意save()方法,它表示例如db.mycollection.save(x);//如果存在该条记录,更新;如果不存在,插入。注意区分。
通过对MongoDB为代表的NoSQL数据库的进一步认识,结合之前博客记录的积累,对于NoSQL数据库例如Redis、MongoDB这些具有相同特点的数据库都应该有了初步的认识。结合项目中队NoSQL数据库的使用,相信对于这部分内容应该有一个清晰的轮廓和实战运用能力。