数据库命令
命令 | 说明 |
---|---|
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})
在缺省情况下创建的索引均不是唯一索引。这种将创建唯一索引