启动服务:
mongod.exe --dbpath D:\data\db
#后面为数据库路径,db是默认数据库,存在data中,可以自己新建。
进入MongoDB后台shell
mongo
显示数据库列表
show dbs
连接到一个指定数据库,也相当于新建
use zhang
#后面的zhang是数据库名字,可以通过show dbs获得,如果zhang不存在,则会新建zhang,并且当你对zhang插入数据的时候,show dbs中才会实现zhang这个数据库的名字
删除当前数据库
db.dropDatabase()
显示当前数据库名字
db
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
- admin:从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
显示当前数据库的集合
show tables
删除当前数据的某个集合
db.mycol.drop()
#其中mycol是集合的名字,相当于关系型数据库中的表,结果返回true或false
显示某个集合中的文档
db.collection.find(query, projection)
#query为查询条件可以不加
#projection也是可选的,以为可以设置某列显示或者不显示,1:显示,0:不显示如:
db.mycol.find({},{"title":1,_id:0}).limit(2)
#意思是查询所有文档,但是title列显示,_id列不显示
#也可以在后面加上pretty()来美化格式
db.mycol.find().pretty()
在当前数据库的某个集合中插入文档
db.mycol.insert({name:"zhangshuai",sex:"man"})
#在mycol集合中插入文档(即相当与关系型数据库中的行),如果mycol不存在则会新建
----------
#可以一次插入多条数据,如:
db.mycol.insert([{name:"zhangshuai",sex:"man"},{name:"lishuai",sex:"man"}])
----------
#也把数据存为一个变量,再插入变量:
document =({name:"zhangshuai",sex:"man"}) #返回结果 {name:"zhangshuai",sex:"man"}
db.mycol.insert(document)
更新集合的方法update()
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
- collection:即你要更新的集合的名字
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如 , <script type="math/tex" id="MathJax-Element-1">,</script>inc…)等,也可以理解为sql update查询内set后面的
- upsert :可选,这个参数的意思是,当为true的时候,如果你更新的条件不存在相符的文档,则把当前更新条件作为一个新的文档插入,,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
例:
db.mycol.update({'name':'zhangshuai'},{$set:{'sex':'bugaosuni'}})
#意思是把集合中存在name字段值为zhangshuai的文档的sex字段改为bugaosuni,如果不存在sex字段则会在文档中添加这个字段。因为再更新语句中没有multi字段,则只会更新符合条件的一条。
删除文档remove()
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,默认是false
writeConcern :(可选)抛出异常的级别。
例:
db.col.remove({zhang:"yes"},{justOne:true})
如果你想某个集合删除所有文档,则可以:
db.col.remove({})
mongodb中的条件比较的方式
操作 | 格式 |
---|---|
等于 | {key:value} |
小于 | {key:{$lt:value}}} |
小于或等于 | {key:{$lte:value}}} |
大于 | {key:{$gt:value}}} |
大于或等于 | {key:{gte:value}}} |
不等于 | {key:{$ne:value}}} |
and条件
db.col.find({key1:value1, key2:value2}).pretty()
or条件
db.mycol.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
and和or联用
db.col.find({like:{$gte:40},$or:[{by:"张帅"},{by:"张三"}]}).pretty()
$type可以用来判断类型
db.col.find({"title" : {$type : 2}}) #2是string,意思就是把title是string类型的查询出来
常见的编号:
类型 | 代号 |
---|---|
Double | 1 |
String | 2 |
Object | 3 |
Array | 4 |
binary data | 5 |
object id | 7 |
Boolean | 8 |
Date | 9 |
Null | 10 |
显示前num条数据limit()
db.mycol.find().limit(5)
#显示前5条
跳过前num条数据 skip()
db.mycol.find().skip(5)
#跳过前5行
skip()和limit()可以联合使用
db.mycol.find().skip(5).limit(5)
相当于查询第六行开始的5行数据
排序 sort()
db.mycol.find().sort({title:1})
#取1时代表的是升序排列,-1代表降序排列
#这句话意思是查询全部结果,并按title升序排列
注意:当sort,skip,limit同时使用的时候,无论排列顺序如何,执行顺序为sort,然后是skip,再然后limit
MongoDB索引 ensureIndex()
如果你在某个字段建立了索引,那么基于那个字段的条件查询就会很快。
db.mycol.ensureIndex({key:1},{})
#key为你要创建的索引字段,1代表升序创建,-1代表降序创建。
#第二个{}中可以添加一些参数,如unique:是否唯一,backgroud:是否会阻塞其他数据库操作,也就是说如果backgroud:true,会在后台建立索引。