Linux mongodb 安装
下载地址
下载到windows
https://www.mongodb.com/download-center/community
切换到安装目录
cd /usr/local/
rz
选择需要上传的文件
创建数据库文件目录
mkdir -p /data/db/
解压压缩包
tar -zxvf 压缩包
重命名(可选)
mv 文件名 新文件名
切换到执行命令目录
cd 解压以后的mongodb路径/bin/
mongod:启动mongodb服务器
mongo:连接mongodb服务器
开启或者关闭防火墙
关闭防火墙命令:systemctl stop firewalld.service
开启防火墙:systemctl start firewalld.service
关闭开机自启动:systemctl disable firewalld.service
开启开机启动:systemctl enable firewalld.service
允许任意ip远程访问MongoDB
在MongoDB的bin目录下
>./mongod --bind_ip 0.0.0.0
服务端
./mongod
客户端
./mongo
客户端
查看数据库
show databases;
show dbs;
创建数据库
use test;
向test数据库中添加数据
>use test
>db.table.insert({_id:1,name:'zhangsan', age:18});
查询test数据库所有
>db.table.find()
>{"-id" : 1,"name":"zhangsan","age":18}
查询test中id为1 的
>db.table.find({-id:1});
>{"-id" : 1,"name":"zhangsan","age":18}
删除id为1的
>db.table.deleteOne({_id:1});
>批量删除
>db.table.deleteMany();
删除table表中所有的数据
>db.table.remove({});
修改table表中指定id的值
>db.table.update({id:1},{$set:{name:'赵柳'}})
springboot操作mongodb 5.0.9
直接操作命令
1.创建数据库
// 创建和切换数据库
>use testdb
// 查看由哪些数据库
>show dbs;
// 删除数据库
>db.dropdatabase();
// 显示当前所在数据库
>db
2.创建集合,类似于表
// 查看集合
>show tables; | show collections;
// 创建集合, 或者直接插入数据,指定创建
>db.createCollection('users');
// 删除集合
>db.users.drop();
3.文档操作
// 插入
>db.users.insert({name:'zhangsan',age:23})
// 插入多条
>db.users.insert([{name:'zhangsan',age:23},{name:'李四',age:16}])
>db.users.insertMany([{name:'小红',age:23},{_id:1,name:'李四',age:18}]);
// 查看
>db.users.find();
// 删除所有
>db.users.remove({});
// 条件删除
>db.users.remove({_id:ObjectId("alsdfkjlajsdflasjdf")});
// 更新
// 将age=25修改为28
// $set保留原始数据的情况下更新
>db.users.update({age:25},{$set:{age:28}});
// multi:true 开启批量更新,默认false
// upsert:true 没有匹配的数据机插入,默认false
>db.users.update(
{age:23}, // 查询条件,都写到第一个{}里面
{$set:{age:25}}, // 修改的内容,都写到第二个{}里面
{multi:true,upsert:true} // 是否开启批量更新,和插入更新操作
);
// 查询操作
>db.users.find(); // 表示查询所有
// db.users.find(
{}, // 查询条件
{} // 返回字段,不写表示返回所有
)
db.users.find().pretty(); pretty();对返回结果格式化,美化查询结果,方便观察
>
// 等值查询
>db.users.find({name:'张三'});
// 小于查询 $lt ,小于等于 $lte
// 大于$gt ,大于等于 $gte
// 不等于 $ne
> db.users.find({age:{$lt:23}});
// and查询
>db.users.find({age:{$lt:23},name:'张三'});
// or
> db.users.find({$or:[{条件1},{条件2}]});
// 模糊查询, 正则表达式实现近似模糊查询 以/开始 以/结束
>db.users.find({name:/张/});
// $size 安照数组长度查询
>db.users.find({arrname:{$size:3}})
// 查询某一条深数据的某个数组字段,有值是 ‘李四’的数据
>db.users.find({arrname:'李四'})
聚合操作
// 排序 sort
>db.users.find().sort({age:1,name:1}) // age:1升序 age:-1降序
// 分页 skip(0) 从那条数据开始,limit(2),每页多少条
>db.users.find().sort({age:1,name:1}).skip(0).limit(2);
// 总条数 count()
>db.users.find().count();
// 去重 distinct()
>db.users..distinct('age')
// 指定返回字段, 1返回 0不返回
>db.users.find({条件},{name:1,age:1})
// $type 检索集合中匹配的数据类型,并返回结果
>db.users.find({title:{$type:'string'}})
索引
// 创建索引 name:1升序索引, name指定索引名称
>db.users.createIndex({name:1},{name:'name_index'})
// 查看所有
>db.users.getIndexes();
// 删除索引
>db.users.dropIndexes();
// 指定索引过期时间
>db.users.createIndex({age:1},{name:'name_index',expireAfterSeconds:15})
// 删除指定索引
>db.users.dropIndex('name_index');
// 统计索引大学
>db.users.totalIndexSize();
// 复合索引
>db.users.createIndex();
>db.users.find({});
聚合查询
// sum:1 ,sum:2 聚合结果*2
>db.users.aggregate({$group:{_id:'$name','sum_name':{$sum:1}}})
// $avg,$max,$min,$push,$addToSet
>
对象
@Document("users")
User{
@Id // 标记id
@Field(value = "userName") // 和mongodb中映射字段注解
@Transient // 不存到mongodb
}
// 插入
mongoTemplate.save(user); // save 方法在_id,存在时更新数据
mongoTemplate.insert(user); // _id存在会报 主键冲突, 批量处理友好,推荐使用
mongoTemplate.insert(users, User.class); // 批量插入
mongoTemplate.insert(users, "users"); // users collection集合的名称
// 查询所有
mongoTemplate.findAll(User.class);
mongoTemplate.findAll(User.class, "users"); // User.class 没有指定@Document("users")
mongoTemplate.find(Query.query(Criteria.where("name").is("张三")), User.class);
mongoTemplate.find(Query.query(Criteria.where("age").lte(25), User.class);
// and,gt,gte,in,is,lt,lte,nin不包括,
// 命令查询
使用 json 字符串方式查询
Query query = new BasicQuery("{name:'张三',age:23}");
mongoTemplate.find(query, User.class);
更新/删除
// 更新
Update update = new Update();
update.set("age", 24);
// 更新符合条件的第一条数据
mongoTemplate.updateFirst(Query.query(Critera.where("age").is(23)), update, User.class);
// 更新复合条件的多条数据
mongoTemplate.updateMulti(Query.query(Critera.where("age").is(23)), update, User.class);
// 条件删除
mongoTemplate.remove(Query.query(Critera.where("age").is(23)), User.class);
// 删除所有
mongoTemplate.remove(new Query(), User.class);
搭建副本集群
// --replSet 副本集 seducelecreplace 副本集名称/集群中其他节点的主机和端口
mongd --port 27017 --dbpath ../db/data1 --bind_ip 0.0.0.0 --replSet seducelecreplace/[localhost:27018,localhost:27019]
mongd --port 27018 --dbpath ../db/data2 --bind_ip 0.0.0.0 --replSet seducelecreplace/[localhost:27017,localhost:27019]
mongd --port 27019 --dbpath ../db/data2 --bind_ip 0.0.0.0 --replSet seducelecreplace/[localhost:27017,localhost:27018]
初始化副本集群
// ip 是服务器公共ip
>var config = {
_id:"seducelecreplace",
members:[
{_id:0,host:"ip:27017"},
{_id:1,host:"ip:27018"},
{_id:2,host:"ip:27019"},
]
}
# 初始化配置
>rs.initiate(config);
# 设置客户端临时可以访问
>rs.secondaryOk();
# 或者
>rs.slaveOk();
副本集:自动故障转移,主从复制,集群,解决问题:1.数据冗余备份 2.架构高可用
不能解决:1.单节点压力问题(硬件限制,并发访问压力)
分片集群
//
>