MongoDB笔记2-使用MongoDB

使用MongoDB

MongoDB存储和操作的数据是以类似JSON的格式数据,使用MongoDB的命令有点类似在页面console中写js的感觉。

创建一个数据库

使用如下命令进行数据库创建

1
2
> use mongotestDB
switched to db mongotestDB
  • use:切换到某个数据库,如果这个数据库不存在则会创建一个数据库对象。这个时候使用show dbs是查询不到这个数据库的,只有在insert一条数据后才能查到。从这里可以看出show dbs命令是从磁盘上去查询的

插入数据

使用以下命令及可插入一条数据

1
2
> db.mycollection.insert({x:10})
WriteResult({ "nInserted" : 1 })
  • db 代表你当前使用的数据库
  • mycollection 代表你的数据要插入到哪个集合,如果这个集合不存在或者说没有使用过则会创建一个新的集合并将数据插入到这个集合中。

如果你的集合名需要空格或者一些符号,但是使用的Mongo shell又不支持的话可以使用以下方式

1
2
3
4
> db["collection-test"].insert({x:20})
WriteResult({ "nInserted" : 1 })
> db.getCollection("collection-test").insert({x:20})
WriteResult({ "nInserted" : 1 })

当然如果觉得数据写的太长也可以这么插入

1
2
3
> var doc = {xx:1,ary:["a","b","c"]}
> db.mycollection.insert(doc)
WriteResult({ "nInserted" : 1 })

批量插入

1
2
3
4
5
6
7
8
9
10
11
12
> var doc = [{x:1},{x:2},{x:3},{x:4}]
> db.mycollection.insert(doc)
WriteResult({
"writeErrors" : [],
"writeConernErroes":[],
"nInserted" : 4,
"nUpserted" : 0,
"nMatched":0,
"nModified":0,
"nRemoved":0,
"upserted":[]
})

如果需要批量的插入,首先声明一个数组,这个数组里存放需要插入的数据。如上面所示插入4条数据

查询数据

MongoDB使用find函数(我不知道应该说命令还是函数-_-|||)去查询,还有一个是findOne函数。

查询mycollection中所有的数据

1
2
> db.mycollection.find({})
{"_id":Object(56c870d24d49c30492efa870), "x":1}

条件查询

1
2
> db.mycollection.find({x:{$gt:0}})
> db.mycollection.find({x:{$lt: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
2
3
4
5
6
> db.testCollection.insert({doc:{y:1,t:2,c:3}})
> db.testCollection.insert({doc:{y:2,t:3,c:4}})
> db.testCollection.insert({doc:{y:3,t:4,c:5}})
> db.testCollection.insert({doc:{y:4,t:5,c:6}})
> db.testCollection.insert({doc:{y:5,t:6,c:7}})
> db.testCollection.insert({doc:{y:6,t:7,c:8}})

查询doc={y:1,t:2,c:3}

1
> db.testCollection.find({doc:{y:6,t:7,c:8}})

查询所有docy = 6的数据

1
> db.testCollection.find({"doc.y":6}})

查询所有docy > 3的数据

1
> db.testCollection.find({"doc.y":{$gt:3}})

查询数组

先插入一些数组

1
2
3
4
5
> db.testCollection.insert({ary:[1,2,3,4,5,6,7]})
> db.testCollection.insert({ary:[3,5,6,7,5,6,3]})
> db.testCollection.insert({ary:[5,5,1,7,5,4,3]})
> db.testCollection.insert({ary:[4,5,6,6,7,6,3]})
> db.testCollection.insert({ary:[2,5,4,7,5,7,3]})

查询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支持查询优化,详情点击>>>

修改数据

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)