MongoDB是一种强大、灵活、可扩展的开源数据库。

一、MongoDB基本概念

1.文档

概念:多个键及其关联的值有序地放置在一起,是一个个键值对,键对应关系型数据库中列的名称,值对应列值

特点:

1)文档中的键值对是有序的
2)值区分字符串和数字
3)键区分大小写

文档键命名规则:

1)_id是系统保留的关键字
2)不能包含\0或空字符
3)不能以$开头
4)不能包含点号
5)区分大小写的且不能重复

2.集合

概念:一组文档,没有固定的结构,集合是无模式的

命名规则:

1)不能是空字符串
2)不能含有\0字符,空字符
3)不能以system开头
4)不能包含$字符

3.数据库

概念:一组集合,一个MongoDB可以承载多个数据库,在开发过程中,通常将一个应用的所有数据存储到同一个数据库中,每个数据库都有独立的权限控制

命名规则:

1)不能是空字符串
2)不得含有/、\、?、$、空格、空字符,基本只能使用ASCII中的字母和数字
3)区分大小写,字母建议全部小写
4)名称最多包含64个字节

4.数据类型

1)null:表示空值或不存在的字段
2)布尔(boolean):true和false
3)数字:MongoDB支持的数字类型比较广泛,包括32位整数,64位整数,64位浮点数
4)字符串:UTF-8字符串都可以表示为字符串类型的数据(字符串使用双引号引用)
5)数组:值的集合或者列表可以表示成数组
6)对象:对象Object

_id和Object,每个文档对应一个_id作为唯一标识
1)如果插入文档的时候没有指定_id值,系统会自动创建
2)插入文档时手动创建的_id值可以是任意类型
3)ObjectId:是_id的默认类型

ObjectId生成规则:时间戳+主机标识符+PID+计数器
时间戳:反应时间的顺序
主机标识符:确保不同主机生成不同的objectId
PID:同一台主机并发的多线程ID
计数器:自动增加的计数器,确保相同进程同一秒产生的ObjectId不一样
日期:MongoDB中支持data作为键的一个值,日期类型存储的是从标准纪元开始的毫秒数
内嵌文档:把整个MongoDB文档当做另一个文档中一个键对应的值


二、MongoDB基本操作

删除文档
Db.集合名.deleteMany({});
Db.集合名.remove({})
更新文档
Db.collection.update(查询条件,更新对象,如果不存在是否插入,默认为false);
Db.collection.save(object)
修改器
1)$inc(只针对数字类型,增加和减少)
Db.myCollection({title:”first”,visites:107})
Db.myCollection({title:”first”},{$inc:{visit:1}}) 修改参观次数增加1
2)$set(可以完成特定需求的修改)
Db.author.update({“name”:”foo”},{$set:{“intro”:”teacher}})
3)$push修改器(可以完成数组的插入)
Db.posts.update({title:”blog”},{$push:{comment:{name:”leon”,email:”leon.email.com”,content:”leon replay”}}})
4)$addToset修改器
Db.user.update({name:”foo”},{$addToset:{Email:[email protected]}})(向email数组中添加一个email信息)
5)更新文档
Db.集合名.update({x:1},{$set:{x:90}},false,true)

三、MongoDB查询

1.find简介

Db.集合名.find({query},{projection})
Query:使用查询操作符指定查询条件
Projection:指定返回的键

Db.user.find({},{“_id”:0,”username”:1}) 指定键的值为0,不返回该键值对;为1时返回
2.条件查询

1)比较操作符
$lt:小于(<),$lte:小于等于,$gt:大于,$gte:大于等于,$ne:不等于
2)包含($in)或不包含($nin)
3)$or查询与$not查询

3.特定类型查询

1)Null
2)正则表达
Db.user.find({“username”:/foo/i})
3)查询数组

4.游标

Limit:限制查询结果返回数量
Skip:跳过指定数目的文档
Sort:对查询结果进行排序
Hint:为查询强制使用指定索引
Explain:用于获取查询执行过程报告
Snapshot:对查询结果使用快照

5.迭代

1)迭代函数
Cursor.forEach(回调函数)
2)基于数组迭代


四、索引和聚合

1.索引

建立在表格之上,提供一个能够更快的定位到数据的方法

1)创建索引

命令格式:db.collection.createIndex(<keys>,<options>)

2)删除索引

Db.集合名.dropIndexes() 删除集合中所有索引
Db.集合名.dropIndex(index)根据指定的索引名称或索引文档删除索引

3)唯一索引

Db.collection.createIndex(索引名,{“unique”:true})
Db.people.createIndex({“name”:1},{“unique”:true,”dropDups”:true}) 消除重复
Db.person.createIndex({“age”:1,”name”:1}) 复合索引
Db.person.createIndex({“age”:1,”name”:1},{“unique”:true}) 复合唯一索引
2.聚合

主要用于处理数据并返回计算结果


第七章

打开终端: telnet localhost 11211

文章目录