java使用mangodb进行多条件组合查询

and or组合查询

  1. 构造BasicDBObject
        BasicDBList andList = new BasicDBList();
        BasicDBObject groupCond = new BasicDBObject();
        groupCond.put("conversationID","GROUP" + groupId);
        andList.add(groupCond);
        if (LongUtil.isNotNullOrZero(id)) {
            BasicDBObject msgIdCond = new BasicDBObject();
            BasicDBObject ltCond = new BasicDBObject();
            ltCond.put("$lt",id);
            msgIdCond.put("msgId",ltCond);
            andList.add(msgIdCond);
        }
        if (ArrayUtil.isNotEmptyOrNull(uids)) {
            BasicDBList orList = new BasicDBList();
            Iterator iterator = uids.iterator();
            while (iterator.hasNext()) {
                BasicDBObject uidCond = new BasicDBObject();
                uidCond.put("from", iterator.next().toString());
                orList.add(uidCond);
            }
            BasicDBObject orAll = new BasicDBObject();
            orAll.put("$or", orList);
            andList.add(orAll);
        }
        BasicDBObject andAll = new BasicDBObject();
        andAll.put("$and",andList);

        FindIterable<Map> result = getCollection().find(andAll,Map.class).sort(new BasicDBObject("msgId",-1)).limit(limit);
        List<Map> list = new LinkedList<>();
        Iterator<Map> iterator = result.iterator();
        while (iterator.hasNext()) {
            list.add(iterator.next());
        }
  1. 构造query
    Query query = new Query();
    Criteria cond = Criteria.where("conversationID").is("GROUP" + groupId);
    if (LongUtil.isNotNullOrZero(id)) {
        cond.andOperator(Criteria.where("msgId").lt(id));
    }

    if (ArrayUtil.isNotEmptyOrNull(uids)) {
        List<Criteria> criteria = new LinkedList<>();
        Iterator iterator = uids.iterator();
        while (iterator.hasNext()) {
            criteria.add(Criteria.where("from").is(iterator.next().toString()));
        }
        cond.andOperator(new Criteria().orOperator(criteria.stream().toArray(Criteria[]::new)));
    }
    query.addCriteria(cond);
    query.with(Sort.by(new Sort.Order(Sort.Direction.DESC, "msgId")));
    FindIterable<Map> result = getCollection().find(query.getQueryObject(),Map.class).sort(query.getSortObject()).limit(limit);
    List<Map> list = new LinkedList<>();
    Iterator<Map> iterator = result.iterator();
    while (iterator.hasNext()) {
        list.add(iterator.next());
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值