MongoDB入门操作汇总,java开发从入门到实战pdf

options是可选参数,包括内存及索引的配置

展示库下所有集合

show collections

向集合插入一条数据

db.[collection_name].insertOne({“key”:“value”})

db.[collection_name].insert({“key”:“value”})

向集合插入多条数据

db.[collection_name].insertMany([{“key”:“value”},{“key”:“value”}…])

删除集合中的数据

Scene.1

db.[colleciton_name].remove({“key”:“value”})

db.[collection_name].deleteMany({“key”:“value”})

类比MySQL中的

delete from table_name where key=value;

Scene.2

db.[collection_name].remove({“key”:{$gt:num}})

类比MySQL中的

delete from table_name where key>num;

Scene.3

db.[collection_name].remove({“key”:{$gte:num}})

类比MySQL中的

delete from table_name where key>=num;

mongo中的比较运算符一览

$eq (is equal) =

$gt (greater than ) >

$gte >=

$lt (less than) <

$lte <=

$ne (not equal) !=

$in in

$nin (not in) !in

, and

$or or

用法示例

| 操作符 | 格式 | 实例 | MySQL类比 |

| — | — | — | — |

| and | {key1 : value1, key2 : value2, …} | db.test.find( {name : “pen”, price : 10} ) | where name = “pen” and price = 10 |

| or | {KaTeX parse error: Undefined control sequence: \[ at position 6: or : \̲[̲{key1 : value1}…or:[{name : “pen”},{price : 10}]} ) | where name = “pen” or price = 10 |

修改集合中的数据

Scene.1

db.[collection_name].update({“key”:“value”},{$set:{“keyC”:“valueC”}})

类比MySQL中的

update table_name set keyC=valueC where key=value;

Scene.2

db.[colletion_name].save(obj)

obj是一条携带_id的记录,如果_id在集合中已存在,则覆盖对应记录,否则新增记录.

查找集合中的数据

Scene.1

db.[collection_name].find()

查询所有数据。以文本形式显示,以插入的先后顺序排序。

Scene.2

db.[collection_name].find().pretty()

查询所有数据,以JSON格式显示。

Scene.3

db.[collection_name].find({“key”:“value”})

类比MySQL

select * from table_name where key=value;

Scene.4

查询集合中前n条数据

db.[collection_name].find().limit(n)

Scene.5

跳过集合中前n条数据进行返回

db.[collection_name].find().skip(n)

Scene.6

对结果集升序排序

db.test.find().sort({“key” : 1})

类比MySQL中的

select * from table_name order by key asc;

对结果集降序排序则将“key”值改为-1。

三、游标

===================================================================

对集合调用find()方法时,会获取一个游标返回。这个游标默认迭代二十次。如果将它赋值给局部变量,那么可以进行手动迭代。所以如果直接调用find()获取结果集,那么最多只能取到20条文档。

3.1 游标方法的释义及示例


测试数据集

db.csr.find()

{ “_id” : 1, “name” : “叶秋” }

{ “_id” : 2, “name” : “吴枫” }

{ “_id” : 3, “name” : “罗淼” }

1.hasNext

判断是否有更多文档

var cursor = db.csr.find()

while (cursor.hasNext()){

… var doc = cursor.next();

… print(doc); //打印一个BSON对象

… printjson(doc); //解析成JSON格式打印

… }

[object BSON]

{ “_id” : 1, “name” : “叶秋” }

[object BSON]

{ “_id” : 2, “name” : “吴枫” }

[object BSON]

{ “_id” : 3, “name” : “罗淼” }

2.next

用来获取下一行文档

var cursor = db.csr.find()

var cursor = db.csr.find()

cursor.next()

{ “_id” : 1, “name” : “叶秋” }

cursor.next()

{ “_id” : 2, “name” : “吴枫” }

cursor.next()

{ “_id” : 3, “name” : “罗淼” }

cursor.next()

uncaught exception: Error: error hasNext: false :

DBQuery.prototype.next@src/mongo/shell/query.js:304:15

@(shell):1:1

3.toArray

将查询结果

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

放到数组中

var cursor = db.csr.find()

var result=cursor.toArray()

print(result)

[object BSON],[object BSON],[object BSON]

printjson(result)

[

{

“_id” : 1,

“name” : “叶秋”

},

{

“_id” : 2,

“name” : “吴枫”

},

{

“_id” : 3,

“name” : “罗淼”

}

]

4.count

查询文档总数量

var cursor = db.csr.find()

print(cursor.count())

3

5.limit

限制查询结果的返回数量

db.csr.find().limit(2)

{ “_id” : 1, “name” : “叶秋” }

{ “_id” : 2, “name” : “吴枫” }

6.skip

跳过指定数目的文档

db.csr.find().skip(1)

{ “_id” : 2, “name” : “吴枫” }

{ “_id” : 3, “name” : “罗淼” }

7.sort

对查询结果进行排序

db.csr.find().sort({"_id":1})

{ “_id” : 1, “name” : “叶秋” }

{ “_id” : 2, “name” : “吴枫” }

{ “_id” : 3, “name” : “罗淼” }

db.csr.find().sort({"_id":-1})

{ “_id” : 3, “name” : “罗淼” }

{ “_id” : 2, “name” : “吴枫” }

{ “_id” : 1, “name” : “叶秋” }

8.objsLeftInBatch

查看当前批次的未被迭代的剩余文本数量

var cursor = db.csr.find()

print(cursor.objsLeftInBatch())

3

cursor.next()

{ “_id” : 1, “name” : “叶秋” }

print(cursor.objsLeftInBatch())

2

9.addOption

修改游标行为

| 参数 | 描述 |

| — | — |

| DBQuery.Option.tailable | 设置光标在接收到最后一个数据后不关闭,从而允许查询 continue 返回在耗尽初始结果之后添加的数据。 |

| DBQuery.Option. slaveOk | 允许查询副本从属。 |

| DBQuery.Option.noTimeout | 防止游标超时 |

| DBQuery.Option.awaitData | 将光标设置为阻塞并 await 一段时间,而不返回任何数据。一旦超时到期,光标将不返回任何数据。 |

| DBQuery.Option.exhaust | 设置游标一次性返回查询返回的所有数据,而不是将结果分成批次。 |

| DBQuery.Option.partial | 设置游标以针对某个分片群集从查询中返回部分数据,在分片群集中,某些分片不响应而是抛出错误。 |

var cursor = db.csr.find().addOption(DBQuery.Option.exhaust)

10.hint

为查询强制使用指定索引

db.csr.find().hint({_id:1})

{ “_id” : 1, “name” : “叶秋” }

{ “_id” : 2, “name” : “吴枫” }

{ “_id” : 3, “name” : “罗淼” }

11.explain

用于获取执行计划

db.test.explain().find()

{

“queryPlanner” : {

“plannerVersion” : 1,

“namespace” : “test.test”,

“indexFilterSet” : false,

“parsedQuery” : {

},

“queryHash” : “8B3D4AB8”,

“planCacheKey” : “8B3D4AB8”,

“winningPlan” : {

“stage” : “COLLSCAN”,

“direction” : “forward”

},

“rejectedPlans” : [ ]

},

“serverInfo” : {

“host” : “DESKTOP-8IVVOTG”,

“port” : 27017,

“version” : “4.4.1”,

“gitVersion” : “ad91a93a5a31e175f5cbf8c69561e788bbc55ce1”

},

“ok” : 1

}

12.snapshot

对查询结果使用快照。文档可能会因体积变大而被合并到文档尾部。为了使查询结果集顺序不变,可以使用快照。

经测试在mongo4.4中已废弃。

四、索引

===================================================================

在查询操作时,如果执行器总是扫描所有文档,那么效率将非常低下。为了解决这个问题,要用到索引。

与MySQL一样,MongoDB也采用B树索引。索引级别从上往下依次为集合、文档字段、文档子字段。

单索引

在key上创建升序索引

db.[collection_name].createIndex(“key”:1)

在key上创建降序索引

db.[collection_name].createIndex(“key”:-1)

索引的升降序无关紧要,执行器可以在任意方向遍历索引。

示例

db.score.insertMany([{“score”:80,“name”:“wf”},{“score”:90,“name”:“timi”}])

{

“acknowledged” : true,

“insertedIds” : [

ObjectId(“5fb620f9f20c8fd2914fb1b9”),

ObjectId(“5fb620f9f20c8fd2914fb1ba”)

]

}

db.score.createIndex({“score”:1})

{

“createdCollectionAutomatically” : false,

“numIndexesBefore” : 1,

“numIndexesAfter” : 2,

“ok” : 1

}

复合索引

复合索引类似于Oracle里的组合索引。

db.[collection_name].createIndex(“key1”:1/-1,“key2”:1/-1)

这里键值顺序是能够决定索引扫描的先后顺序的。

多键值索引

创建方式与单索引相同,当被索引的键值为数组时,索引被称为多键值索引,这样的索引会为数组中的每个元素创建索引键。

地理索引

适用于坐标字段的索引

全文索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件已上传到百度网盘,附件中是下载地址。真正免积分免费完整版,绝不出现仅下载到部分章节,书中广告页要求QQ联系支付宝购买完整版的流氓行为! 欢迎免积分下载更多本人独有网上难寻觅的 高清IT电子书:http://download.csdn.net/user/sinophp123 人无我有,人有我优,人优我廉!我的版本是全网最清晰的独家制作版本,还不要资源分。 同样一本书,下我的就可以了! 本人上传资料的原则: (1)如果CSDN和网上其他地方已随处可见高清下载,本人不再上传。 (2)如果网上已有我还上传,那么肯定是经重新制作,如不再缺页,清晰度更高,或者加上书签。 (3)每本书都经过逐页纯手工精心处理,包括清晰度的增强,水印的去除。当然最重要的,是尽量保证有书 签方便您浏览。 (4)如果是中译版,文件名前半部分是英文原版书名,后面是中译版书名。 如:“Implementing.Responsive.Design-响应式Web设计实践”。书名经反复校对绝无一字错漏。 (5)每本pdf书默认都是有书签的。来源不限“某星”网站,还有各大网络书店和出版社官网的页码信息。 凡无书签的pdf文件名均含“_no.bookmark”字样,如“HTML5程序开发范例宝典_no.bookmark”。请不要再 浪费时间去寻找书签,肯定没有,网上别人提供的下载版本也绝对不会有(除非您是出版社内部人员!), 没有人会浪费自己时间逐页输入章节页码来费时费力免费给您制作。 (6)只提供中文书籍,您不用担心下载的是英文原版。 (7)只提供完整版,绝不上传只有部分章节的所谓“迷你书”,“试读版”。 (8)书中绝不含广告页和水印LOGO。 Teach.Yourself.NoSQL.with.MongoDB.in.24.Hours-MongoDB入门经典 [美]布拉德·戴利(brad dayley)(著) | 米爱中(译) | 人民邮电出版社 | 9787115391117 | 2015-06-01
NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。 这些数据有很大一部分是由关系数据库管理系统(RDMBSs)来处理。 1970年 E.F.Codd's提出的关系 模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程 更加简单。 通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数 据存储在网络和商务应用的主导技术。 NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥 护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新 的思维的注入。 关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性: 1、A (Atomicity) 原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里 的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。 比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账 户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100 元。 2、C (Consistency) 一致性 一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一 致性约束。 例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足 a+b=10,否则事务失败。 3、I (Isolation) 独立性 所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修 改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。 比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。 4、D (Durability) 持久性 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。 分布式系统 分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广 域网)组成。 分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和 透明性。 因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 分布式系统可以应用在在不同的平台上如:Pc、工作站、局域网和广域网上等。 分布式计算的优点 可靠性(容错) : 分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器。 可扩展性: 在分布式计算系统可以根据需要增加更多的机器。 资源共享: 共享数据是必不可少的应用,如银行,预订系统。 灵活性: 由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。 更快的速度: 分布式计算系统可以有多台计算机的计算能力,使得它比其他系统有更快的处理速度。 开放系统: 由于它是开放的系统,本地或者远程都可以访问到该服务。 更高的性能: 相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。 分布式计算的缺点 故障排除: :故障排除和诊断问题。 软件: 更少的软件支持是分布式计算系统的主要缺点。 网络: 网络基础设施的问题,包括:传输问题,高负载,信息丢失等。 安全性: 开发系统的特性让分布式计算系统存在着数据的安全性和共享的风险等问题。 什么是NoSQL? NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系 型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。 这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。 为什么使用NoSQL ? 今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人 信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户 数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的 数据。 实例社会化关系网: Each record: UserID1, UserID2 Separate records

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值