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条文档。
测试数据集
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开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!