二十六、mongodb的安装和使用
命令行操作
启动:
Windows下和linux下有点区别:以下是linux下的操作
启动服务的几种方法:
启动服务1: mongod --dbpath ./data/db --logpath ./log/mongodb.log -logappend
可以将启动参数编写到mongo.cfg中:
Vi ./bin/mongo.cfg
#set location for data
dbpath=/home/hadoop/installed/mongodb-linux-x86_64-3.2.1/data/db
#set location for log
logpath=/home/hadoop/installed/mongodb-linux-x86_64-3.2.1/log/mongodb.log
#set other conf
启动服务2: mongod -f ./bin/mongo.cfg 或者使用-f/--config
启动服务3: ./bin/start_mongo.sh (封装启动命令到shell脚本)
常见操作:
-mongo :连接到客户端
-db :查看当前所在的db
-use yourdb: 切换db,没有也会切换过去,但是是虚的,不会真正创建
-show dbs :显示所有的db,默认有一个local
-show collections :显示该db下的所有集合
常见操作(CRUD):
1、-db.collection.insert() 注:collection是具体的自己的集合名,刚开始没有,都是是虚的,没有并不影响我们的使用,当有数据写入就会产生(存入数据是json格式)。
> db
> show dbs
> show collections
> db.test.insert({name:'aidon',age:30,sex:'m'})
WriteResult({ "nInserted" : 1 }) 写入1条数据成功
> show dbs 此时你会发现多咯一个你现在在的库
> show collections 此时你会发现多咯个test集合
> db.test.insert({name:'fj',facevalue:66}) 再插入一条数据,就能体现它的模式自由咯
WriteResult({ "nInserted" : 1 })
2、-db.collection.find()
> db.test.find() 查询全部
{ "_id" : ObjectId("5981925a76082a1a8e58131b"), "name" : "aidon", "age" : 30, "sex" : "m" }
{ "_id" : ObjectId("598193b876082a1a8e58131c") 会发现多一个_id,该id可以指定,你不指定默认生成全集群唯一的标识。
> db.test.find({name:'fj'}) 指定查询条件
{ "_id" : ObjectId("598193b876082a1a8e58131c"), "name" : "fj", "facevalue" : 66 }
3、-db.collection.update()
> db.test.update({name:'fj'},{name:'fy'}) 该操作需要两个参数,第一个是源,第二个是修改后的值。都是json格式
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 1个匹配,0个插入,1个修改,注意:如果匹配不上将会被插入
> db.test.find() 更新完后插寻看看对不对
{ "_id" : ObjectId("5981925a76082a1a8e58131b"), "name" : "aidon", "age" : 30, "sex" : "m" }
{ "_id" : ObjectId("598193b876082a1a8e58131c"), "name" : "fy" } 发现是覆盖的样子?对,的确是重写咯,这也有其使用场景。但我就想更新某个值怎么办?
> db.test.update({name:'aidon'},{$set:{name:'aidon Li'}}) 加$set操作符,其后的json就是需要更改的
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test.find() 再次查询试试,是否只改咯一个字段
{ "_id" : ObjectId("5981925a76082a1a8e58131b"), "name" : "aidon Li", "age" : 30, "sex" : "m" }
{ "_id" : ObjectId("598193b876082a1a8e58131c"), "name" : "fy" }
4、-db.collection.remove()
> db.test.insert({name:'fj'})
WriteResult({ "nInserted" : 1 })
> db.test.remove({name:'fy'}) 指定条件删除,删除所有是不指定条件吗?不是的,用drop
WriteResult({ "nRemoved" : 1 })
> db.test.find() 再次查询
{ "_id" : ObjectId("5981925a76082a1a8e58131b"), "name" : "aidon Li", "age" : 30, "sex" : "m" }
{ "_id" : ObjectId("598197c976082a1a8e58131d"), "name" : "fj" }
> db.test.remove() 删除所有会报错的
5、-db.collection.drop()
> db.test.drop() 删除整个集合的数据
True
这个操作很多,不同的版本还有些不一样,所以请参考官网中的doc->mongo shell。地址:
https://docs.mongodb.com/manual/mongo/ 里面有curd操作的连接
· db.collection.updateOne(<filter>, <update>, <options>)
· db.collection.updateMany(<filter>, <update>, <options>)
· db.collection.replaceOne(<filter>, <replacement>, <options>)
特点:
1、库是虚的,只有当该库下有数据该库才能被真正创建
2、集合相当于以前关系数据库中的表,集合也是虚的,集合下没有数据时,该集合不会真正创建。
3、一切都是虚的,只有当底层的创建上来,上层才会被创建。
4、存储key-value的json格式的数据
5、存储也是分布式的,可以容易水平扩展