mongondb 笔记

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);

    }

    /**
     * 分页查询
     * @param query  mongo Query 对象,构造你自己的查询条件
     * @param entityClass  mongo collection 定义的entity class ,确定集合
     * @param pageSize  每页大小
     * @param pageNum  当前页
     * @param mapper   映射器 collection 定义的entityClass,如要转化为另一个对象
     * @param lastId  上一页的主键id
     * @param <T>   mongo映射实体类
     * @param <R>   响应实体类
     * @return     分页参数
     */
    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");
		// 第 5 个参数 代表 获取返回指定属性 List
        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") //collection  对应库名
public class Mongon {
    @Id
    String _id; //mongon主键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);
 //查询条件query.with(sort).        
 //跳过 0数量的记录 skip(0)
 //限制1条  limit(1)
 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));//条件查询,字段c_number 是xxx
        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));//根据唯一id查询这条数据
        Update update = new Update();
        update.set("dosomthing","1");//更改这条记录的dosomthing的字段为1
        mongoTemplate.updateFirst(q, update, name);//name 为mongondb库名
部分参考自:
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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值