MongoDB
1.安装
下载MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.6-rc0.tgz
解压缩
tar -zxvf mongodb-linux-x86_64-rhel70-5.0.6-rc0.tgz
在/etc/profile
下面配置环境变量
export MONGODB_HOME=/home/wl/mongodb-linux-x86_64-rhel70-5.0.6-rc0 #文件安装路径
export PATH=$PATH:$MONGODB_HOME/bin
让配置文件生效
source /etc/profile
2.配置mongoDB
在bin目录下 建 data
和logs
文件夹,并在logs
文件夹里面建一个mongodb.log
文件
配置conf文件
vim mongodb.conf
dbpath = /home/wl/mongodb-linux-x86_64-rhel70-5.0.6-rc0/data/db #数据文件存放目录
logpath = /home/wl/mongodb-linux-x86_64-rhel70-5.0.6-rc0/logs/mongodb.log #日志文件存放目录
port = 27017 #端口
fork = true #以守护程序的方式启用,即在后台运行
auth=true #开启安全验证(可以不开启).
logappend=true #日志输出方式,日志append而不是overwrite
目录结构如下
mongodb文件夹/
├── bin
│ ├──data
│ ├ ├──db
│ ├── etc
│ ├ ├──mongodb.conf
│ ├── install_compass
│ ├── logs
│ ├ ├──mongodb.log
│ └── mongo
│ └── mongod
│ └── mongos
├── LICENSE-Community.txt
├── MPL-2
└── THIRD-PARTY-NOTICES
└── README
3.启动mongoDB
启动mongoDB
mongod --config /etc/mongod.conf --fork
启动成功如下图所示
进入mongoDB数据库
./mongo
4.mongodb的使用
1.数据库的操作
1.创建数据库 wl:
注:如果数据库不存在,则创建数据库,否则切换到指定数据库。
use wl
查看所有的数据库
show dbs
发现并没有我们刚创建的数据库 wl, 要显示它,我们需要向 wl 数据库插入一些数据
db.wl.insert({"name":"小王"})
再次查看
2.删除数据库
db.dropDatabase()
2.集合的操作
1.创建集合
db.createCollection(name,options)
2.删除集合
db.collection.drop()
注: 通常情况下 直接使用use
关键字进行操作,自动区创建集合和数据库
3.CRUD操作
1.插入文档
插入一条数据,insert或save
save:如果 _id 主键存在则更新数据,如果不存在就插入数据
db.stu.insert({name:"张三",age:12})
db.stu.save({nmae:"小李",address:"北京市"})
在3.2版本以后新增了db.collection.insertOne() 和 db.collection.insertMany()两个方法
**db.collection.insertOne() **是向集合中插入一个文档
db.stu.insertOne({language:"java",url:"spring.io"})
还可以以变量的形式进行控制
var document=db.stu.insertOne({school:"Normal University"})
再执行插入操作
db.stu.insert(document)
db.collection.insertMany()是向集合中插入一个或多个文档
db.stu.insertMany([{desc:"测试1",author:"没有梦想的java菜鸟",time:"2022-1-24"},{id:"1005",name:"kotlin菜鸟",time:"2022-1-20"},{desc:"测试2",author:"没有梦想",time:"2022-1-24"}])
2.更新文档
更新文档分为update()和save()两个方法
- update()更新已经存在的文档
- save()更新已经存在的文档.如果文档不存在就插入
Update()
:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
- query:查询条件
- update:更新后的对象
- upsert:可选参数,如果存在更新的对象就更新,否则插入。默认为false
- multi:可选参数,只更新找到的第一条记录。默认为false,如果为true,就把按条件查出来多条记录全部更新
- writeConcern:可选参数,抛出异常的级别
实例
db.stu.update({'id':'1005'},{$set:{'id':'1055'}})
save()
:
db.stu.save({'id':'1006','language':'kotlin'},{$set:{'id':'1007','language':'java'}})
3.删除文档
语法格式如下:
db.collection.remove(
<query>,
<justOne>
)
- query:删除文档的条件
- justOne:设置为true或1,则只删除一个文档,不设置则删除所有匹配条件的文档
db.stu.remove({title:"新便签页"})
此时删除的是匹配的两个文档
4.查询文档
格式化方式阅读
db.stu.find().pretty()
条件查询
db.stu.find({age:{$gt:10}})
- (>) 大于 - $gt
- (<) 小于 - $lt
- (>=) 大于等于 - $gte
- (<= ) 小于等于 - $lte
按类型查找,查找name属性是字符串的记录
db.stu.find({"name":{$type:'string'}})
分页查询 limit 和 跳过数据 skip
db.stu.find().limit(2)
跳过头两条数据,显示第2到4条数据
db.stu.find().limit(2).skip(2)
使用sort()方法对数据进行排序,1代表升序,-1代表降序
db.stu.find().sort({name:-1})
4.索引
在3.0.0版本之前使用 db.collection.ensureIndex()创建索引,之后的版本使用 db.collection.createIndex()
语法:
db.collection.createIndex(keys, options)
keys 表示创建索引的字段,options为1或-1,1代表升序
实例:
创建一个索引
db.stu.createIndex({"id":1})
![image-20220207143833198](/Users/wangliang/Library/Application Support/typora-user-images/image-20220207143833198.png)
查看集合的索引
db.stu.getIndexes()
查看集合索引大小
db.stu.totalIndexSize()
删除集合 所有索引
db.stu.dropIndexes()
删除集合指定索引
db.stu.dropIndex("id")
索引过期时间,类似于redis的过期 expire
db.stu.createIndex({"time":1},{expireAfterSeconds:40})
注:
索引关键字段必须是 Date 类型
单字段索引,混合索引不支持
非立即执行
10.kotlin连接Mongodb
1.导入gradle依赖
implementation("org.mongodb:mongo-java-driver:3.12.8")
2.获取连接-URL获取
val uri= MongoClientURI("url地址")
val client=MongoClient(uri)
3.CRUD
获取数据库,如果没有会自动创建
val database =client.getDatabase("Tga_test")
创建并获取集合
database.createCollection("tga")
val collection=database.getCollection("tga")
插入文档
// 创建文档
val document = Document("title","大耳朵图图")
.append("name","胡图图")
.append("age","3")
.append("address","翻斗花园")
// 插入多条记录
val list:MutableList<Document> = ArrayList()
list.add(document)
collection.insertMany(list)
println("添加记录完成O(∩_∩)O哈哈~")
删除文档
collection.deleteOne(Filters.eq("key",ossPath.toString()))
更新文档
val doc1 = Document()
doc1.append("name","张三")
val doc2 = Document("$" + "set", doc1)
collection.updateOne(Filters.eq("title", "大耳朵图图"), doc2)
获取全部文档
val findIterable = collection.find()
val mongoCursor = findIterable.iterator()
while (mongoCursor.hasNext()) {
println(mongoCursor.next().toJson())
}