一、MongoDB安装使用
1、安装启动MongoDB
1.1 下载安装
官网:
https://www.mongodb.com/
rpm下载地址:
http://mirrors.aliyun.com/mongodb/yum/redhat/7/mongodb-org/
[root@master1 ~]# ls mongodb-3.0.0/
mongodb-org-3.0.0-1.el7.x86_64.rpm
mongodb-org-mongos-3.0.0-1.el7.x86_64.rpm
mongodb-org-server-3.0.0-1.el7.x86_64.rpm
mongodb-org-shell-3.0.0-1.el7.x86_64.rpm
mongodb-org-tools-3.0.0-1.el7.x86_64.rpm
暂时不需要分片功能(mongos),只安装这三个包:
[root@master1 mongodb-3.0.0]# yum install mongodb-org-server-3.0.0-1.el7.x86_64.rpm mongodb-org-shell-3.0.0-1.el7.x86_64.rpm mongodb-org-tools-3.0.0-1.el7.x86_64.rpm
查看包组相关信息:
[root@master1 ~]# rpm -qi mongodb-org-server
查看包组生成的文件:
[root@master1 ~]# rpm -ql mongodb-org-server
1.2 配置,启动
创建数据存放目录:
[root@master1 ~]# mkdir -pv /mongodb/data
[root@master1 ~]# chown -R mongod:mongod /mongodb/
配置
[root@master1 ~]# vim /etc/mongod.conf
dbpath=/mongodb/data
#注释掉监听地址后,默认监听在0.0.0.0地址上
#bind_ip=127.0.0.1
#开启WEB监听
httpinterface=true
rest=true
启动服务:
[root@master1 ~]# systemctl start mongod
服务启动后初始化的数据文件:
[root@master1 ~]# ls /mongodb/data/
journal local.0 local.ns mongod.lock storage.bson _tmp
访问web接口:http://10.201.106.131:28017/
1.3 客户端连接
获取客户端命令使用帮助:
[root@master1 ~]# mongo -h
连接:
[root@master1 ~]# mongo --host 10.201.106.131
显示当前有多少个数据库:
> show dbs
MongoDB可以不创建数据库,直接使用(在库里面创建表后,库会自动创建出来,延时创建):
> use testdb
switched to db testdb
> show dbs
local 0.078GB
2、MongoDB基本使用
2.1 基本操作
获取帮助:
> help
显示用户(默认没有开启认证信息):
> show users
显示已存在的数据库
> show dbs
显示当前库的collections(名称列表)
> show collections
查看可以用在db级别的命令:
> db.help()
2.2 db命令
查看当前数据库信息:
> db.stats()
查看数据库版本号:
> db.version()
查看服务器级别状态信息
> db.serverStatus()
显示当前库内的所有名称列表:
> db.getCollectionNames()
3、CRUD语句
3.1 创建
创建collection并插入数据
> db.students.insert({name:"tom",age:23})
WriteResult({ "nInserted" : 1 })
查看collection:
> show collections
students
system.indexes
同时自动创建了数据库:
> show dbs;
local 0.078GB
testdb 0.078GB
查看collection状态信息:
> db.students.stats()
查看库里的collection:
> db.getCollectionNames()
[ "students", "system.indexes" ]
继续在students插入数据:
> db.students.insert({name:"jerry",age:40,gender:"M"})
WriteResult({ "nInserted" : 1 })
3.2 文档(collection)操作
获取文档操作命令:
> db.mycollect.help()
查看一个命令的使用帮助:
> db.mycollect.find().help()
查看collection里面的文档:
> db.students.find()
{ "_id" : ObjectId("587bc5e2a954a5d5a876fb24"), "name" : "tom", "age" : 23 }
{ "_id" : ObjectId("587bd2f0a954a5d5a876fb25"), "name" : "jerry", "age" : 40, "gender" : "M" }
统计collection里面的文档个数
> db.students.count()
2
多插入几个数据
> db.students.insert({name:"Ou Yangfeng",Age:90,Course:"HaMegong"})
WriteResult({ "nInserted" : 1 })
> db.students.insert({name:"Yang Guo",Age:20,Course:"Meinv Quan"})
WriteResult({ "nInserted" : 1 })
> db.students.insert({name:"Guo Jing",Age:40,Course:"Xianglong Shibazhang"})
WriteResult({ "nInserted" : 1 })
3.3 查询(find)
查询年龄大于30的记录:
> db.students.find({Age: {$gt: 30}})
{ "_id" : ObjectId("587bd99ea954a5d5a876fb26"), "name" : "Ou Yangfeng", "Age" : 90, "Course" : "HaMegong" }
{ "_id" : ObjectId("587bd9f4a954a5d5a876fb28"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xianglong Shibazhang" }
查找年龄20和40的记录:
> db.students.find({Age:{$in: [20,40]}})
{ "_id" : ObjectId("587bd9bfa954a5d5a876fb27"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
{ "_id" : ObjectId("587bd9f4a954a5d5a876fb28"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xianglong Shibazhang" }
查找年龄不是20和40的记录:
> db.students.find({Age:{$nin: [20,40]}})
$or: 或运算,语法格式{$or: [{<expression1>},{...}]}
$and: 与运算
$not:非运算
$nor:反运算,返回不符指定条件的所有文档
查找Age=20,40或者age=20,40的记录
> db.students.find({$or:[{Age:{$in: [20,40]}},{age:{$in: [20,40]}}]})
{ "_id" : ObjectId("587bd2f0a954a5d5a876fb25"), "name" : "jerry", "age" : 40, "gender" : "M" }
{ "_id" : ObjectId("587bd9bfa954a5d5a876fb27"), "name" : "Yang Guo", "Age" : 20, "Course" : "Meinv Quan" }
{ "_id" : ObjectId("587bd9f4a954a5d5a876fb28"), "name" : "Guo Jing", "Age" : 40, "Course" : "Xianglong Shibazhang" }
查看有Gender字段的文档:
> db.students.find({gender: {$exists: true}})
{ "_id" : ObjectId("587bd2f0a954a5d5a876fb25"), "name" : "jerry", "age" : 40, "gender" : "M" }
3.4 更新
文档操作帮助:
> db.mycoll.help()
下面命令默认只更新一个文档(一行),如需更新整个collection要加multi_bool参数
db.mycoll.update()
修改tom的年龄为21:
> db.students.update({name:"tom"},{$set: {age: 21}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.students.find({name:"tom"})
{ "_id" : ObjectId("587bc5e2a954a5d5a876fb24"), "name" : "tom", "age" : 21 }
修改age字段名为Age:
原始数据:
> db.students.find({age: {$exists: true}})
{ "_id" : ObjectId("587bc5e2a954a5d5a876fb24"), "name" : "tom", "age" : 21 }
{ "_id" : ObjectId("587bd2f0a954a5d5a876fb25"), "name" : "jerry", "age" : 40, "gender" : "M" }
修改:
> db.students.update({},{$rename: {"age": "Age"}},false,true)
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 2 })
3.5 删除
删除年龄为21的文档(行):
> db.students.remove({Age: 21})
删除collection(类似删除整张表):
> db.teachers.drop()
true
删除当前数据库:
> db.dropDatabase()
> show dbs
local 0.078GB
3.6 其他
统计查询个数:
> db.students.find({Age: {$in: [20,40]}})
{ "_id" : ObjectId("587bd2f0a954a5d5a876fb25"), "name" : "jerry", "gender" : "M", "Age" : 40 }
{ "_id" : ObjectId("587bd9bfa954a5d5a876fb27"), "name" : "Yang Guo", "Course" : "Meinv Quan", "Age" : 20 }
{ "_id" : ObjectId("587bd9f4a954a5d5a876fb28"), "name" : "Guo Jing", "Course" : "Xianglong Shibazhang", "Age" : 40 }
> db.students.find({Age: {$in: [20,40]}}).count()
3
只显示一行
> db.students.find({Age: {$in: [20,40]}}).limit(1)
{ "_id" : ObjectId("587bd2f0a954a5d5a876fb25"), "name" : "jerry", "gender" : "M", "Age" : 40 }
跳过第一行,后显示剩余行:
> db.students.find({Age: {$in: [20,40]}}).skip(1)
{ "_id" : ObjectId("587bd9bfa954a5d5a876fb27"), "name" : "Yang Guo", "Course" : "Meinv Quan", "Age" : 20 }
{ "_id" : ObjectId("587bd9f4a954a5d5a876fb28"), "name" : "Guo Jing", "Course" : "Xianglong Shibazhang", "Age" : 40 }
符合条件时只显示其中一个:
> db.students.findOne({Age: {$gt: 10}})
{
"_id" : ObjectId("587bd2f0a954a5d5a876fb25"),
"name" : "jerry",
"gender" : "M",
"Age" : 40
}