mnongotenplate 分页工具类
public class MongoPageHelper {
private static final int FIRST_PAGE_NUM = 1;
private static final String ID = "_id";
private final MongoTemplate mongoTemplate;
public MongoPageHelper(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
public <T> PageResult<T> pageQuery(Query query, Class<T> entityClass, Integer pageSize, Integer pageNum,String collectionName) {
return pageQuery(query, entityClass, pageSize, pageNum, Function.identity(), null,collectionName);
}
public <T, R> PageResult<R> pageQuery(Query query, Class<T> entityClass, Integer pageSize,
Integer pageNum, Function<T, R> mapper, String lastId,String collectionName) {
long total = mongoTemplate.count(query, entityClass, collectionName);
final Integer pages = (int) Math.ceil(total / (double) pageSize);
if (pageNum <= 0) {
pageNum = FIRST_PAGE_NUM;
}
if (!StringUtils.isEmpty(lastId)) {
Criteria criteria = new Criteria();
if (pageNum != FIRST_PAGE_NUM) {
criteria.and(ID).gt(new ObjectId(lastId));
}
query.addCriteria(criteria);
query.limit(pageSize);
}else {
int skip = pageSize * (pageNum - 1);
query.skip(skip).limit(pageSize);
}
List<T> entityList = mongoTemplate.find(query, entityClass, collectionName);
final PageResult<R> pageResult = new PageResult<>();
pageResult.setTotal(total);
pageResult.setPages(pages);
pageResult.setPageSize(pageSize);
pageResult.setPageNum(pageNum);
pageResult.setList(entityList.stream().map(mapper).collect(Collectors.toList()));
return pageResult;
}
}
***************************使用
@Autowired
private MongoTemplate mongoTemplate;
@GetMapping("/testMongoPage")
public String testMongoPage() {
MongoPageHelper mongoPageHelper = new MongoPageHelper(mongoTemplate);
Query query = new Query();
Sort sort = Sort.by(Sort.Direction.DESC, "valueInt");
query.with(sort);
Criteria criteria = new Criteria();
criteria.and("valueInt").lt(14);
query.addCriteria(criteria);
PageResult<MongoTestEntity> pageResult = mongoPageHelper.pageQuery(query, MongoTestEntity.class,
3, 1, "mongoTest");
PageResult<MongoTestEntity> pageResult2 = mongoPageHelper.pageQuery(query, MongoTestEntity.class,
3, 2, "mongoTest");
PageResult<String> pageResult3 = mongoPageHelper.pageQuery(query, MongoTestEntity.class,
3, 2,MongoTestEntity::getValueStr , null, "mongoTest");
System.out.println(pageResult);
System.out.println("------------------------------");
System.out.println(pageResult2);
System.out.println("===============================");
System.out.println(pageResult3);
return “success”;
}
实体类,用来接收mongon的所有属性
@Data
@Document(collection = "devicemessage")
public class Mongon {
@Id
String _id;
@Field
String deviceType;
@Field
String dosomthing;
}
controller
注解,调用mongon的公用方法
@Autowired
MongoTemplate mongoTemplate;
查询所有历史条数并且id倒序排列
Sort sort = Sort.by(Sort.Direction.DESC,"_id");
Query query = new Query();
long count = mongoTemplate.count(query.with(sort), Mongon.class);
System.out.println("总条数:"+count);
List<Mongon> mongon = mongoTemplate.find(query.with(sort).skip(0).limit(1), Mongon.class);
加where筛选条件
Query query = new Query();
query = Query.query(Criteria.where("c_number").is(c_number));
Sort sort = Sort.by(Sort.Direction.DESC,"_id");
long count = mongoTemplate.count(query.with(sort), Mongon.class);
System.out.println("总条数:"+count);
List<Mongon> mongon = mongoTemplate.find(query.with(sort).skip(number).limit(limit), Mongon.class);
根据唯一标识id更改这条数据的内容
Query q = new Query();
Criteria criteria = new Criteria();
q.addCriteria(Criteria.where("id").is(id));
Update update = new Update();
update.set("dosomthing","1");
mongoTemplate.updateFirst(q, update, name);
部分参考自:
https://juejin.im/post/5afb9de8518825426c690307
********************给admin库设置用户名密码*************
1.切换到 'admin' 数据库 use admin
use admin
2.创建用户名密码
user: 用户名, pwd: 用户密码,roles: 用来设置用户的权限,比如读,读写 等等
db.createUser({user: 'root', pwd: '123456', roles: ['root']})
******************给ceshi库设置用户名密码登录**********
1.切换到测试库
use ceshi
2.创建用户名密码并对该库赋予读写权限
db.createUser({user:'jl',pwd:'123456',roles: [{role:'readWrite',db:'ceshi'}]})
3.重启mongondb,并以权限方式启动
cmd:
mongod.exe --dbpath D:\mongodb\data\db --auth
4.登录ceshi库
use ceshi
5.用户验证
db.auth('jl','123456');
6.验证登陆成功,可以查看数据了
db.ceshi.find();