一、数据库操作
1.选择和创建数据库
use 数据库名
2.查看数据库
show databses
或
show dbs
3.查询当前使用的数据库
db
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库:
- admin:从权限的角度来看,这是“root”数据库,要是将一个用户添加到这个数据库,这个用户自动集成所有数据库的权限。一些特定的服务端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config:当MongoDB用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
4.数据库的删除
db.dropDatabase()
二、集合操作
1.集合创建
1.1显示创建(了解)
db.createCollection(name)
例如:db.createCollection("lzl")
1.2隐式创建 当向一个集合中插入文档的时候,如果集合不存在,则会自动创建集合
2.查看当前库中的集合(表):
show collections
或
show tables
3.集合的删除
db.collection.drop()
或
db.集合.drop()
如果成功删除选定集合,则drop()方法返回true,否则返回false
三、文档的CRUD
1.单个文档的插入(使用insert()或者save()向集合中插入文档)
db.collection.insert(
{
writeConcern: <document>,
ordered: <boolean>
}
)
Parameter | Type | Description |
---|
document | document or array | 要插入到集合中的文档或文档数组(json格式) | writeConcern | document | 插入时性能的级别 | ordered | boolean | 可选。如果为真,则按顺序插入数组中的文档,如果其中一个文档出现错误,MongoDB将返回而不处理数组中的其余文档。如果为假,则执行无序插入,如果其中一个文档出现错误,则继续处理数组中的主文档。在版本2.6+中默认为true |
插入的案例如下:
db.comment.insert(
{
"articleid": "10000",
"content" : "aaaaa",
"userid" : "1001",
"nickName" : "Rose",
"createdatatime": new Data(),
"likenum" : NumberInt(10),
"state" : null
}
)
2.批量插入
db.comment.insertMany([
{
"_id" : "1",
"articleid": "10000",
"content" : "aaaaa",
"userid" : "1001",
"nickName" : "Rose",
"createdatatime": new Data(),
"likenum" : NumberInt(10),
"state" : null
},
{
"_id" : "2",
"articleid": "10000",
"content" : "aaaaa",
"userid" : "1001",
"nickName" : "Rose",
"createdatatime": new Data(),
"likenum" : NumberInt(10),
"state" : null
}
])
try{
db.comment.insertMany([
])
}catch(e){
print(e)
}
3.查询文档
db.collection.find()
或
db.collection.find({})
例子:查询userid=1003的文档
db.comment.find({userid:"1003"})
投影查询例子:如果查询结果我只想显示articleid,只需要后面再加一个json如下发所示
db.comment.find({userid:"1003"},{articleid:1})
db.comment.find({userid:"1003"},{articleid:1,_id:0})
4.修改文档
直接举例子: 1)覆盖的修改,执行后其他字段会消失
db.collection.updata({_id:"1"},{likenum:NumberInt(1001)})
2)局部修改,加上$set
db.collection.updata({_id:"1"},{$set:{likenum:NumberInt(1001)}})
3)批量修改 以上的修改都只会修改符合条件的第一条文档。想要修改所有符合条件的文档,只需要增加第三参数,看下方:
db.collection.updata({_id:"1"},{$set:{likenum:NumberInt(1001)}},{multi:true})
4)列值增长的修改
db.collection.updata({_id:"1"},{$inc:{likenum:NumberInt(1)}})
5.删除文档
删除文档的语法结构:
db.collection.remove(条件)
以下语句可以将数据全部删除
db.collection.remove({})
如果删除_id=1的记录,输入以下语句
db.collection.remove({_id:"1"})
6.分页查询
1.统计文档数量
db.collection.count()
db.collection.count({字段:值})
2.返回制定条数的记录,在find方法后加上limit,默认是20
db.collection.find().limit(3)
3.skip方法同意接受一个数字参数作为跳过的记录条数。(前N个不要),默认值是0
db.collection.find().skip(3)
分页查询案例:要求每页2个
//第一页
db.collection.find().skip(0).limit(2)
//第二页
db.collection.find().skip(2).limit(2)
//第三页
db.collection.find().skip(4).limit(2)
7.排序查询
sort()方法对数据进行排序,sort()方法可以通过参数指定排序字段,用1和-1来指定排序升序和降序。 案例:查询对userid降序,对likenum升序
db.collection.find().sort({userid:-1,likenum:1})
skip,limit,sort三个放在一起执行的时候,先执行 sort,然后是skip,最后是limit!
8.正则的复杂条件查询
db.collection.find(字段:/正则表达式/)
或
db.集合.find(字段:/正则表达式/)
tips:正则表达式是js的语法,直接量的写法。 例1:查询内容包含开水的所有文档
db.collection.find({content:/开水/})
例2:查询内容以“”开水”开头的所有文档
db.collection.find({content:/^开水/})
9.比较查询
db.集合名.find({
"字段":{运算符:value}
})
运算符 | 作用 |
---|
$gt | 大于 | $gte | 大于等于 | $lt | 小于 | $lte | 小于等于 | $ne | 不等于 |
10.包含查询
包含查询使用 $in操作符 例子:查询文档userid字段包含1003或1004的文档
db.collectionn.find({userid:{$in:["1003","1004"]}})
不包含使用$nin操作符 例子:查询文档userid字段不包含1003或1004的文档
db.collectionn.find({userid:{$nin:["1003","1004"]}})
11.条件连接查询
如果查询同时满足两个以上的条件,需要使用$and操作符将条件进行关联 例子:查询评论集合中likenum>=700且<2000的文档
db.collection.find({
$and:[
{likenum:{$gte:NumberInt(700)}},
{likenum:{$lt:NumberInt(2000)}}
]
})
如果两个以上的条件之间是或者的关系,我们使用$or操作符进行关联 例子:查询集合中userId为1003或者点赞数小于1000的文档记录
db.comment.find({
$or : [
{userid:"1003"},
{likenum:{$lt:1000}}
]
})
四、索引的基本操作
1.查看索引
db.collection.getIndexes()
2.索引的创建
db.collection.createIndex(keys,options)
例子:
db.lzl.createIndex({userid:1})
db.lzl.createIndex({userid:1,nickname:-1})
3.索引的移除
db.collection.dropIndex(索引名)
或
db.collection.dropIndex({字段:排序方式(1|-1)})
db.collection.dropIndexes()
4.执行计划
在查询后面加上explain
db.collection.find(条件).explain()
如果用到了索引,stage如下: 如果没有用到索引,stage如下:
|