MongoDB入门操作汇总

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

将查询结果放到数组中

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)

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

多键值索引

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

地理索引

适用于坐标字段的索引

全文索引

db.[collection_name].createIndex({“key”:“text”})

散列索引

按照某个字段的散列值来建立索引,目前只能用于字段完全匹配,而不能用于范围查询。

db.[collection_name].createIndex({“key”:“hashed”})

派生索引

索引上面还可以加索引,包括稀疏索引、唯一索引、过期索引等。我将其统称为派生索引。

稀疏索引

在一般索引的基础上加上稀疏索引后,索引将跳过所有不包含索引字段的文档,因此是稀疏的。

db.[collection_name].createlndex ({ “key” : 1/-1 }, { sparse : true })

唯一索引

设置了唯一索引之后,那么新插入文档时,要求key值是唯一的。

db.[collection_name].createlndex ({ “key” : 1/-1 }, { unique : true })

过期索引

用于在一定时间后删除字段。

db.[collection_name].createlndex( {“key” : 1/-1 }, { expireAfterSeconds: 3600 })

以上这个索引的作用是:文档插入3600秒后自动删除。

查看集合下索引

db.[collection_name].getIndexes()

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
的。

db.[collection_name].createlndex ({ “key” : 1/-1 }, { unique : true })

过期索引

用于在一定时间后删除字段。

db.[collection_name].createlndex( {“key” : 1/-1 }, { expireAfterSeconds: 3600 })

以上这个索引的作用是:文档插入3600秒后自动删除。

查看集合下索引

db.[collection_name].getIndexes()

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-q9yhgtGA-1715829402813)]

[外链图片转存中…(img-jf1rNM4c-1715829402814)]

[外链图片转存中…(img-nbHxiE3a-1715829402814)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值