湛江网站制作公司,aspnet网站开发实例教程pdf,电子商务网站的整个建设流程,中国建设银行网站的机构MongoDB记录是一个文档#xff0c;由一个字段和值对组成的数据结构#xff0c;文档类似于JSON对象。 一个文档认为就是一个对象#xff0c;字段的数据类型是字符型#xff0c;值除了使用基本类型外#xff0c;还可以包括其他文档#xff0c;普通数组和文档数组。
一、…MongoDB记录是一个文档由一个字段和值对组成的数据结构文档类似于JSON对象。 一个文档认为就是一个对象字段的数据类型是字符型值除了使用基本类型外还可以包括其他文档普通数组和文档数组。
一、下载安装、解压、创建存放数据文件的目录data/db
①、window安装
启动方式
命令行参数方式启动bin目录下打开命令提示符mongod --dbpath…\data\db 默认端口27017可以通过–port来指定端口配置文件方式启动在解压目录中创建config文件夹该文件夹中新建配置文件mongod.conf
②、Linux中通过docker安装
docker pull mongo:latest# 创建和启动容器
docker run -d --restartalways -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo# 查看
docker ps# 进入容器
docker exec -it mymongo /bin/bash# 使用客户端进行操作
mongo# 查询当前mogodb中有哪些数据库
show dbs 命令行进行连接
图形化界面进行连接
Linux系统中进行安装、启动、连接 基本常用命令 创建一个集合table
db.createCollection(collName)# 得到指定名称的集合
db.getCollection(user)向comment集合中插入一条数据并查询
db.User.save({name:jordan,age:23,sex:true})db.User.find() #查询所有db.User.find({name:jordan}) #查询指定名字的数据db.User.find({age:23},{name:1,age:1}) #查询age23的只显示name/age字段db.User.createIndex({name:1}) # 添加索引如果comment不存在则会隐式创建 数字默认是double类型如果存整型需要函数NumberInt() 插入的数据没有指定_id会自动生成主键值 如果某字段没有值可以赋值为null或不写该字段
db.comment.insert({articleid:100000,content:今天天气好晴朗处处好风光,userid:1001,nickname:Rose,createdatetime:new Date(),likenum:NumberInt(10),state:null}
)批量插入 如果某条数据插入失败将会终止插入但已经插入成功的数据不会回滚掉。 可以使用try{…}catch(e){print(e);}
db.comment insertMany([{_id:1,articleid:100001,content:天气晴朗,userid:10002,nickname:jordan,createdatetime:new Date(2008-08-01),likenum:NumberInt(1000),state:1},{},{}]
)投影查询只查询部分字段
db.comment.find({userid:1003},{userid:1,nickname:1}
)排序
#1为升序排列-1为降序排列
db.User.find().sort({age:1}) 文档更新
# 覆盖修改修改_id为1点赞量为1001
db.comment.update({_id:1},{likenum:NumberInt(1001)}) # 局部修改修改_id为2浏览量为889
db.comment.update({_id:2},{$set:{likenum:NumberInt(889)}})# 批量修改更新所有用户为1003的用户的昵称
db.comment.update({userid:1003},{$set:{nickname:jordan}}) # 默认只修改一条数据
db.comment.update({userid:1003},{$set:{nickname:jordan}},{multi:true}) # 修改所有符合条件的数据# 列值增长的修改对原有值的基础上进行增加或减少可以使用$inc运算符
# 对3号数据的点赞数每次递增1
db.comment.update({_id:3},{$inc:{linknum:NumberInt(1)}})分页查询
db.comment.find().limit(3) # 查询3条记录默认值20
db.comment.find().skip(3) # 跳过3条记录默认值0# 每页2个
db.comment.find().skip(0).limit(2) # 第一页
db.comment.find().skip(2).limit(2) # 第二页
db.comment.find().skip(4).limit(2) # 第三页正则表达式实现的模糊查询
# 内容评论包含开水打的所有文档
db.comment.find({content:/开水/})# 以专家开头的评论内容
db.comment.find({content:/^专家/})比较查询
# 评论点赞数大于700
db.comment.find({linenum:{$gt:NumberInt(700)}})包含查询
# 查询评论集合中userid字段包含1003或1004的文档
db.comment.find({userid:{$in:[1003,1004]}})# 不好含使用$nin操作符 查询集合中suerid字段不包含1003和1004的文档
db.comment.find({userid:{$nin:[1003,1004]}})条件连接查询
# 查询评论集合中likenum大于等于700并且小于2000的文档 $and:[{},{}]
db.comment.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})# 或 $or:[{},{}] 查询评论集合中userid为1003或者点赞数小于1000的文档记录
db.comment.find({$or:[{userid:1003},{likenum:{$lt:1000}}]})删除操作
db.User.remove(id) # 按照指定id移除db.User.remove() #移除所有总结 创建索引
# 单字段索引对userid字段建立索引
db.comment.createIndex({userid:1})# 复合字段索引对userid和nickname同时建立复合索引
db.comment.createIndex({userid:1,nickname:-1})移除索引
# 删除userid字段上的升序索引
db.comment.dropIndex({userid:1})# 删除所有索引(_id的字段是无法删除的只能删除非_id字段的索引)
db.comment.dropIndexes()执行计划
# 根据userid查询数据的情况建立的索引是否有效效果如何
db.comment.find({userid:1003}).explain()MongoDB集群和安全
副本集的创建
一、创建主节点
二、创建副本节点
三、创建仲裁节点
四、初始化配置副本集和主节点
五、查看副本集的配置内容和副本集的状态
六、添加副本节点
七、添加冲裁节点
八、数据的读写
故障测试 SpringBoot集成mongodb
spring-data-mongodb提供了两种方式访问mongodb ①、MongoTemplate ②、MongoRepository 不够灵活所以MongoTemplate弥补了不足
一、添加依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-mongodb/artifactId
/dependency二、application.properties配置文件添加连接信息
spring.data.mongodb.urimongodb://47.93.118.241:27017/test三、创建对应的实体类
Data
Document(User) //指定对应的mongodb对应的
public class User{Idprivate String id;private String name;private Integer age;private String email;private String createData;
}四、测试
通过MongoTemplate实现对MongoDB的CRUD
SpringBootTest
public class DemomogoApplicationTests{Autowiredprivate MongoTemplate mongoTemplate;//添加操作Testpublic void create(){User user new User();user.setAge(20);user.setName(jordan);user.setEmail(jordanqq.com);User user mongoTemplate.insert(user);//返回添加后的数据}//查询所有记录Testpublic void findAll(){ListUser all mongoTemplate.findAll(User.class);System.out.println(all);}//根据id查询Testpublic void findById(){User user mongoTemplate.findById(id,User.class);}//条件查询Testpublic void findUserList(){Query query new Query(Criteria.where(name).is(jordan).and(age).is(23));mongoTemplate.find(query,User.class);}//模糊查询Testpublic void findLikeUserList(){String name jor;String regex String.format(%s%s%s,^.*,name,.*$);Pattern pattern Pattern.compile(regex.Pattern.CASE_INSENSTIVE);Query query new Query(Criteria.where(name).regex(pattern));mongoTemplate.find(query,User.class);}//分页查询Testpublic void findPageUserList(){int pageNo 1; //当前页int pageSize 3; //每页显示数String name jor;String regex String.format(%s%s%s,^.*,name,.*$);Pattern pattern Pattern.compile(regex.Pattern.CASE_INSENSTIVE);Query query new Query(Criteria.where(name).regex(pattern));//分页构建//查询记录数(当前页(pageNo - 1)*pageSize)long count mongoTemplate.count(query,User.class);ListUser users mongoTemplate.find(query,skip((pageNo - 1)*pageSize).limit(pageSize),User.class);}//修改操作Testpublic void updateUser(){//1.根据id查询User user mongoTemplate.findById(id,User.class);//2.设置修改值user.setName(kobe);user.setAge(24);user.setEmail(kobeqq.com);//3.调用方式实现修改Query query new Query(Criteria.where(_id).is(user.getId()));Update update new Update();update.set(name,user.getName());update.set(age,user.getAge());update.set(email,user.getEmail());UpdateResult upsert mongoTemplate.upsert(query,update,User.class);long modifiedCount upsert.getModifiedCount();//影响的行数}//删除操作Testpublic void deleteUser(){Query query new Query(Criteria.where(_id).is(id获取));DeleteResult remove mongoTemplate.remove(query,User.class);long deletedCount remove.getDeleteCount();System.out.println(deletedCount);}
}通过MongoRepository实现对MongoDB的CRUD
SpringData提供了对mongodb的数据访问支持只需要继承MongoRepository
①、创建一个接口继承MongoRepository
public interface UserRepository extends MongoRepositoryUser,String{}②、将上面的接口注入到业务类中
Autowired
private UserRepository userRepository;//添加操作
Test
public void create(){User user new User();user.setAge(16);user.setName(james);user.setEmail(james.qq.com);User u userRepository.save(user);
}//查询所有
Test
public void findId(){ListUer all userRepository.findAll();
}//根据id查询
Test
public void findId(){User user userRepository.findById(id值).get();
}//条件查询
Test
public void findUserList(){User user new User();user.setAge(23);user.setName(jordan);ExampleUser userExample Example.of(user);ListUser all userRepository.findAll(userExample);
}//模糊查询
Test
public void findLikeUserList(){//设置模糊查询的匹配规则(设置模糊查询忽略大小写)ExampleMatcher matcher ExampleMatcher.matching().withStringMatcher(ExampleMather.StringMatcher.CONTAINING).withIgnoreCase(true);User user new User();user.setAge(23);user.setName(jor);ExampleUser userExample Example.of(user,matcher);ListUser all userRepository.findAll(userExample);
}//分页查询
Test
public void findPageUserList(){//设置分页参数//0代表第一页Pageable pageable PageRequest.of(0,3);User user new User();user.setName(jordan);ExampleUser userExample Example.of(user);PageUser page userRepository.findAll(userExample,pageable); page.getTotalPages();//总页数
}//修改
Test
public void updateUser(){User user userRepository.findById(id值).get();user.setAge(100);user.setName(jordan);user.setEmail(jordanqq.com);User save userRepository.save();//如果有id表示修改没有id表示保存
}//删除
Test
public void deleteUser(){userRepository.deleteById(id值);
}