MongoDB增删改查笔记

在这里插入图片描述

数据库命令

命令说明
show dbs查询电脑上都有哪些数据库
show collections查询当前数据库里面有那些集合(表)
use test切换到test数据库,没有就自动添加test数据库

use test添加的时候是个空的数据库,show dbs查询不到,需要往里面添加数据才能查询到。
插入数据只能往集合里插入数据,下面命令表示给test数据库的user集合中插入数据 db.user.insert::{"name":"xiaohong"})
这个(user)就是集合的名字

MySQL里面叫表;MongoDB里面叫集合

添加命令

往user集合里插入一条数据
db.user.insert({"name": "张三","age":"18"})

添加多条数据
db.user.insert({"name":"李四", "age": "20"}, {"name":"小明", "age": "10"})

查询命令

查询user集合里面有多少条数据
db.user.find().count()

查找user集合里name=xiaoming的数据
db.user.find({"name":"xiaoming"})

查找user集合中age>10的数据
db.user.find({age:{$gt:10}})

查找user集合中age < 10的数据
db.user.find({age:{$lt:10}})

如果要查找age>=20并且<=50,中间用逗号隔开就行
db.user.find({age:{$gt:20,$lt:50}})

类似于HTML里的转义字符
大于 $gt ——> greater than
小于 $lt ——> less than

  • 模糊查询,方法和正则差不多 这个性能可能不太好

模糊查询,查找name里面带有ng的数据
db.user.find({name:/ng/})

查找name里以x开头的数据
db.user.find({name:/^x/})

查找name里以x结尾的数据
db.user.find({name:/x$/})

  • 指定列(条)查询

只查找一列name的数据
db.user.find({},{name:1})

查找一列age大于20的数据
db.user.find({age:{$gt:20}})

查找name=huoxing,age=12的数据
db.user.find({name:'huoxing'},{age:12})

查询前三条数据 (limit:限制)
db.user.find().limit(3)

查询3条以后的数据,就是跳过前三条数据往后查找所有数据 (skip:跳过)
db.user.find().skip(3)

查询指定的几条数据,跳过前三条数据查找刚刚跳过三条后的前两条数据
db.user.find().skip(3).limit(2)

  • or与查找

查找age=15与age=30的数据
db.abc.find({$or:[{age:15},{age:30}]})

  • 升降序查询

升序查找 1 2 3 4 5
db.user.find().sort({age:1})

降序查找 5 4 3 2 1
db.user.find().sort({age:-1})

删除命令

  • db.dropDatabase():删除当前所在的数据库

  • db.user.drop():删除当前数据库中的user集合

  • 删除所有数据

如果不写条件的话就是删除hello集合里面所有的数据
db.hello.remove()

  • 删除指定数据

删除hello集合里面name是zhangsan的数据
db.hello.remove({name:"zhangsan"})

  • 只删除一条数据

这个是删除age小于50里的第一条数据,后面的不删就删一条数据
db.hello.remove({age:{$lt:50}}, {justOne:true})

更改命令

  • 更新指定数据

前面是调前,后面的$set:是要更新的数据
db.abc.update({"username":"zhangsan1"},{$set:{username:"张三11"}})

  • 更新指定数据并且添加一条新数据

把张三11改成zhangsan1,并且在新增一条height=188的数据
db.abc.update({"username":"张三11"},{$set:{username:"zhangsan1","height":188}})

  • 批量更改数据(multi:多数)

把age小于5的数据全部更改为10,批量更改必须在后面在加一个参数为true{multi:true}
db.abc.update({age:{$lt:5}},{$set:{age:10}},{multi:true})

索引

索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。

创建索引

db.user.createIndex({"name":1})

在 5.0 中移除 db.collection.ensureIndex() 已被替换 db.collection.createIndex()。

获取当前集合的索引

db.user.getIndexes()

删除索引

db.user.dropIndex({"name":1})

从 MongoDB 4.2 开始,您不能指定 db.collection.dropIndex("*")删除所有非_id索引。改为使用 db.collection.dropIndexes()。

分析查询性能

db.user.find({"name":"测试56987"}).explain("executionStats")

分析查询性能返回的结果

{
        "explainVersion" : "1",
        "queryPlanner" : {
                "namespace" : "demo1.user",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "name" : {
                                "$eq" : "测试56987"
                        }
                },
                "maxIndexedOrSolutionsReached" : false,
                "maxIndexedAndSolutionsReached" : false,
                "maxScansToExplodeReached" : false,
                "winningPlan" : {
                        "stage" : "COLLSCAN",
                        "filter" : {
                                "name" : {
                                        "$eq" : "测试56987"
                                }
                        },
                        "direction" : "forward"
                },
                "rejectedPlans" : [ ]
        },
        "executionStats" : {
                "executionSuccess" : true,
                "nReturned" : 1,
                "executionTimeMillis" : 868,
                "totalKeysExamined" : 0,
                "totalDocsExamined" : 1000000,
                "executionStages" : {
                        "stage" : "COLLSCAN",
                        "filter" : {
                                "name" : {
                                        "$eq" : "测试56987"
                                }
                        },
                        "nReturned" : 1,
                        "executionTimeMillisEstimate" : 33,
                        "works" : 1000002,
                        "advanced" : 1,
                        "needTime" : 1000000,
                        "needYield" : 0,
                        "saveState" : 1000,
                        "restoreState" : 1000,
                        "isEOF" : 1,
                        "direction" : "forward",
                        "docsExamined" : 1000000
                }
        },
        "command" : {
                "find" : "user",
                "filter" : {
                        "name" : "测试56987"
                },
                "$db" : "demo1"
        },
        "serverInfo" : {
                "host" : "LAPTOP-4BKF5HFA",
                "port" : 27017,
                "version" : "5.0.5",
                "gitVersion" : "d65fd89df3fc039b5c55933c0f71d647a54510ae"
        },
        "serverParameters" : {
                "internalQueryFacetBufferSizeBytes" : 104857600,
                "internalQueryFacetMaxOutputDocSizeBytes" : 104857600,
                "internalLookupStageIntermediateDocumentMaxSizeBytes" : 104857600,
                "internalDocumentSourceGroupMaxMemoryBytes" : 104857600,
                "internalQueryMaxBlockingSortMemoryUsageBytes" : 104857600,
                "internalQueryProhibitBlockingMergeOnMongoS" : 0,
                "internalQueryMaxAddToSetBytes" : 104857600,
                "internalDocumentSourceSetWindowFieldsMaxMemoryBytes" : 104857600
        },
        "ok" : 1
}

唯一索引

db.user.createIndex({"name":1}, {"unique": true})

在缺省情况下创建的索引均不是唯一索引。这种将创建唯一索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值