使用MongoDB
MongoDB存储和操作的数据是以类似JSON的格式数据,使用MongoDB的命令有点类似在页面console
中写js
的感觉。
创建一个数据库
使用如下命令进行数据库创建
1 | > use mongotestDB |
- use:切换到某个数据库,如果这个数据库不存在则会创建一个数据库对象。这个时候使用
show dbs
是查询不到这个数据库的,只有在insert
一条数据后才能查到。从这里可以看出show dbs
命令是从磁盘上去查询的
插入数据
使用以下命令及可插入一条数据
1 | > db.mycollection.insert({x:10}) |
- db 代表你当前使用的数据库
- mycollection 代表你的数据要插入到哪个集合,如果这个集合不存在或者说没有使用过则会创建一个新的集合并将数据插入到这个集合中。
如果你的集合名需要空格或者一些符号,但是使用的Mongo shell
又不支持的话可以使用以下方式
1 | > db["collection-test"].insert({x:20}) |
当然如果觉得数据写的太长也可以这么插入
1 | > var doc = {xx:1,ary:["a","b","c"]} |
批量插入
1 | > var doc = [{x:1},{x:2},{x:3},{x:4}] |
如果需要批量的插入,首先声明一个数组,这个数组里存放需要插入的数据。如上面所示插入4条数据
查询数据
MongoDB使用find
函数(我不知道应该说命令还是函数-_-|||)去查询,还有一个是findOne
函数。
查询mycollection
中所有的数据
1 | > db.mycollection.find({}) |
条件查询
1 | > db.mycollection.find({x:{$gt:0}}) |
- 大于
(greater than)
使用$gt
,上面命令第一条命令表示:查询x
大于0的所有数据 - 小于
(less than)
使用$lt
,第二条表示:查询x
小于0的所有数据
查询显示指定字段
1 | > db.mycollection.find({x:{$gt:0}}, {x:1}) |
- 查询
x
大于0的所有数据,只列出x
字段
1 | > db.mycollection.find({x:{$gt:0}}, {x:0}) |
- 查询
x
大于0的所有数据,不显示x字段
某个条件内查询
1 | > db.testCollection.find({x:{$in:[10,11]}}) |
- 查询testCollection中
x
在属于10或11中的所有数据
条件或查询
1 | > db.testCollection.find({$or:[{x:{$gt:12}},{t:3}]}) |
- 查询testCollection中
x
大于12或者t
小于3的所有数据
查询嵌入文档
先插入一个文档doc
1 | > db.testCollection.insert({doc:{y:1,t:2,c:3}}) |
查询doc={y:1,t:2,c:3}
1 | > db.testCollection.find({doc:{y:6,t:7,c:8}}) |
查询所有doc
中y = 6
的数据
1 | > db.testCollection.find({"doc.y":6}}) |
查询所有doc
中y > 3
的数据
1 | > db.testCollection.find({"doc.y":{$gt:3}}) |
查询数组
先插入一些数组
1 | > db.testCollection.insert({ary:[1,2,3,4,5,6,7]}) |
查询ary=[1,2,3,4,5,6,7]
的所有数据
1 | > db.testCollection.find({ary:[1,2,3,4,5,6,7]}) |
查询数据第0
个数等于2
的数据
1 | > db.testCollection.find({"ary.0":2}) |
查询数组中某个元素满足条件
1 | > db.testCollection.find({ary:{$elemMatch:{$gt:2, $lt:5}}}) |
- 查询条件
ary
中存在元素满足大于2
小于5
的所有数组
修改数据
MongoDB提供update
函数,$set
操作符来执行更新操作
1 | > db.testCollection.update({x:1},{$set:{x:100}, $currentDate: { lastModified: true }}) |
- 将满足
x
为1的数据x
值改为100,并通过$currentDate
添加时间字段lastModified
默认情况下使用update
函数只更新一条数据,如果需要更新多条数据使用操作字段multi
1 | > db.testCollection.update({x:1},{$set:{x:100}, $currentDate: { lastModified: true }}, { multi: true }) |
直接替换
1 | > db.testCollection.update({x:1},{x:111, y:100 }) |
- 满足
x=1
条件的第一条数据将会被替换成{x:111, y:100}
如果加上
upsert
字段并设值为true
将会修改多条满足条件的数据,如果不存在此条件的数据将会添加一条数据
删除数据
MongoDB使用remove
函数进行删除操作
删除集合中所有的数据
1 | > db.testCollection.remove({}) |
删除满足条件的数据
1 | > db.testCollection.remove({x:1}) |
删除单个数据,设置参数1
或者true
1 | > db.testCollection.remove({x:1}, 1) |