Example usage for com.mongodb DBCollection aggregate

List of usage examples for com.mongodb DBCollection aggregate

Introduction

In this page you can find the example usage for com.mongodb DBCollection aggregate.

Prototype

@SuppressWarnings("deprecation")
    @Nullable
    private Cursor aggregate(final List<? extends DBObject> pipeline, final AggregationOptions options,
            final ReadPreference readPreference, final boolean returnCursorForOutCollection) 

Source Link

Usage

From source file:HW4.java

@SuppressWarnings("empty-statement")
private void executeQueryButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_executeQueryButtonActionPerformed

    DefaultTableModel dtm = new DefaultTableModel(0, 0);

    //nothing is selected
    if (finalCat.isEmpty()) {
        if (!Address.isEmpty() && !proximity.isEmpty()) {

            if (Address.contains("3799 S Las Vegas Blvd Eastside Las Vegas, NV 89119")) {
                longitude = -115.16768879999999;
                latitude = 36.103017899999998;
            }//from   w ww .  jav  a 2 s. c o  m

            if (Address.equalsIgnoreCase("6002 S Durango Dr Ste 100 Spring Valley Las Vegas, NV 89113")) {
                longitude = -115.27906539999999;
                latitude = 36.079256100000002;
            }

            if (Address.equalsIgnoreCase("1801 E Baseline Rd, #101 Ste 101 Tempe, AZ 85283")) {
                longitude = -111.90860979259;
                latitude = 33.377052104372098;
            }

            if (Address.equalsIgnoreCase("1033 S Park St Bay Creek Madison, WI 53715")) {
                longitude = -89.397478300000003;
                latitude = 43.055539400000001;
            }

            if (Address.equalsIgnoreCase("University Center II Lot Phoenix, AZ 85008")) {
                longitude = -112.02540759999999;
                latitude = 33.451857400000002;
            }
            DB dbBusiness = mongoClient.getDB("business");
            DBCollection collBusiness = dbBusiness.getCollection("business");

            BasicDBList geoCoord = new BasicDBList();

            geoCoord.add(longitude);
            geoCoord.add(latitude);

            BasicDBList geoParams = new BasicDBList();
            geoParams.add(geoCoord);
            geoParams.add(Integer.parseInt(proximity) / 1018.59);

            BasicDBObject query = new BasicDBObject("loc",
                    new BasicDBObject("$geoWithin", new BasicDBObject("$center", geoParams)));

            resultTable.setModel(dtm);
            String header[] = new String[] { "B_ID", "Business", "City", "State", "Stars" };
            dtm.setColumnIdentifiers(header);
            DBCursor cursorForBusiness = collBusiness.find(query);
            while (cursorForBusiness.hasNext()) {
                //pointInterest.add(cursorForBusiness.next());
                Object[] row = new Object[5];
                row[0] = cursorForBusiness.next().get("business_id");
                row[1] = cursorForBusiness.next().get("name");
                row[2] = cursorForBusiness.next().get("city");
                row[3] = cursorForBusiness.next().get("state");
                row[4] = cursorForBusiness.next().get("stars");

                dtm.addRow(row);
            }

        }

        if (!memberSince.isEmpty() || !operReviewCount.isEmpty() || !operNoOfFriends.isEmpty()
                || !operAvgStar.isEmpty() || !valueReviewCount.isEmpty() || !valueNoOfFriends.isEmpty()
                || !valueAvgStar.isEmpty() || !andOrAttribute.isEmpty() || !operNoOfVotes.isEmpty()
                || !valueNoOfVotes.isEmpty()) {

            DB dbUser = mongoClient.getDB("user");
            DBCollection collUser = dbUser.getCollection("user");
            BasicDBObject andQuery = new BasicDBObject();
            List<BasicDBObject> obj = new ArrayList<BasicDBObject>();
            try {
                if (!memberSince.isEmpty()) {
                    obj.add(new BasicDBObject("yelping_since", memberSince));
                }
                if (!valueReviewCount.isEmpty()) {
                    int vrc = Integer.parseInt(valueReviewCount);
                    BasicDBObject rCount = null;
                    if (operReviewCount.equals(">")) {
                        rCount = new BasicDBObject("review_count", new BasicDBObject("$gt", vrc));
                        //rCount = new BasicDBObject("$where", "review_count >" + vrc);
                    }
                    if (operReviewCount.equals("<")) {
                        rCount = new BasicDBObject("review_count", new BasicDBObject("$lt", vrc));
                        //rCount = new BasicDBObject("$where", "review_count <" + vrc);
                    }
                    if (operReviewCount.equals("=")) {
                        rCount = new BasicDBObject("review_count", vrc);
                        // rCount = new BasicDBObject("$where", "review_count =" + vrc);
                    }

                    obj.add(new BasicDBObject(rCount));
                }
                if (!valueNoOfFriends.isEmpty()) {
                    int vnf = Integer.parseInt(valueNoOfFriends);
                    BasicDBObject vFriends = null;
                    if (operNoOfFriends.equals(">")) {
                        vFriends = new BasicDBObject("$where", "this.friends.length >" + vnf);
                    }
                    if (operNoOfFriends.equals("<")) {
                        vFriends = new BasicDBObject("$where", "this.friends.length <" + vnf);
                    }
                    if (operNoOfFriends.equals("=")) {
                        vFriends = new BasicDBObject("$where", "this.friends.length =" + vnf);
                    }

                    obj.add(new BasicDBObject(vFriends));
                }
                if (!valueAvgStar.isEmpty()) {
                    Double doubleValueAvgStar = Double.parseDouble(valueAvgStar);
                    BasicDBObject avgStarValue = null;
                    if (operAvgStar.equals(">")) {
                        avgStarValue = new BasicDBObject("average_stars",
                                new BasicDBObject("$gt", doubleValueAvgStar));
                        // avgStarValue = new BasicDBObject("$where", "average_stars >" + doubleValueAvgStar);
                    }
                    if (operAvgStar.equals("<")) {
                        avgStarValue = new BasicDBObject("average_stars",
                                new BasicDBObject("$lt", doubleValueAvgStar));
                        // avgStarValue = new BasicDBObject("$where", "average_stars <" + doubleValueAvgStar);
                    }
                    if (operAvgStar.equals("=")) {
                        avgStarValue = new BasicDBObject("average_stars", doubleValueAvgStar);
                        // avgStarValue = new BasicDBObject("$where", "average_stars =" + doubleValueAvgStar);
                    }

                    obj.add(new BasicDBObject(avgStarValue));

                }
                if (!valueNoOfVotes.isEmpty()) {
                    //                                BasicDBObject noOfVotesValue = null;
                    //                                 if (operNoOfVotes.equals(">")) {
                    //                            noOfVotesValue = new BasicDBObject("average_stars", new BasicDBObject("$gt", valueNoOfVotes));
                    //                        }
                    //                        if (operNoOfVotes.equals("<")) {
                    //                            noOfVotesValue = new BasicDBObject("average_stars", new BasicDBObject("$lt", valueNoOfVotes));
                    //                        }
                    //                        if (operNoOfVotes.equals("=")) {
                    //                            noOfVotesValue = new BasicDBObject("average_stars", new BasicDBObject("$eq", valueNoOfVotes));
                    //                        }   
                    //                        
                    //                        obj.add(new BasicDBObject(noOfVotesValue));

                }
                System.out.println(andOrAttribute);
                if (andOrAttribute.equalsIgnoreCase("AND")) {
                    System.out.println("Here");
                    andQuery.put("$and", obj);
                } else {
                    andQuery.put("$or", obj);
                }
                queryLabel.setText("<html><p>" + andQuery.toString() + "</p></html>");
                List<DBObject> outputMyList = new ArrayList<DBObject>();
                DBCursor cursor = collUser.find(andQuery);
                while (cursor.hasNext()) {
                    //System.out.println(cursor.next());
                    outputMyList.add(cursor.next());
                }

                resultTable.setModel(dtm);
                String header[] = new String[] { "U_ID", "User Name", "Yelping Since", "Avg Stars",
                        "Review Count" };
                // add header in table model     
                dtm.setColumnIdentifiers(header);
                for (DBObject temp : outputMyList) {
                    //System.out.println("Business Name : " + temp.get("name") + " Category :  " + temp.get("categories"));
                    Object[] row = new Object[5];
                    row[0] = temp.get("user_id");
                    row[1] = temp.get("name");
                    row[2] = temp.get("yelping_since");
                    row[3] = temp.get("average_stars");
                    row[4] = temp.get("review_count");

                    dtm.addRow(row);
                }

            } catch (Exception e) {

            }

        } else {
            queryLabel.setText("Please select atleast one category from business");
        }
    } //only cat selected
      //////////////////////////Business//////////////////////////////////////////////////////////
    if (finalCat.size() > 0) {
        DB dbBusiness = mongoClient.getDB("business");
        DBCollection collBusiness = dbBusiness.getCollection("business");
        if (!fromCheckin.isEmpty() && !fromCheckinHour.isEmpty() && !toCheckin.isEmpty()
                && !toCheckinHour.isEmpty() && !operationCheckin.isEmpty() && !valueCheckin.isEmpty()) {
            DB dbCheckin = mongoClient.getDB("checkin");
            DBCollection collCheckin = dbCheckin.getCollection("checkin");

            if (!fromReview.isEmpty() && !toReview.isEmpty() && !operationStar.isEmpty() && !valueStar.isEmpty()
                    && !operationVote.isEmpty() && !valueVote.isEmpty()) {
                //////////////////////Category, Checkin and Review///////////////////////////////////////////////////
                DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH);
                String fromDate1 = fromReview;
                String fromdate = fromDate1 + "T00:00:00Z";
                String toDate1 = toReview;
                String todate = toDate1 + "T00:00:00Z";
                int starValue = Integer.parseInt(valueStar);
                int voteValue = Integer.parseInt(valueVote);
                StringBuffer finalQuery = new StringBuffer();
                DB dbReview = mongoClient.getDB("review");
                DBCollection collReview = dbReview.getCollection("review");
                int j = 0;
                int l = 0;

                HashMap<String, Integer> tempCheckin = new HashMap<String, Integer>();
                ArrayList<String> finalCheckinBid = new ArrayList<String>();

                ArrayList<CheckinDetail> checkinList = new ArrayList<CheckinDetail>();
                //System.out.println("I am in checkin box");
                String[] arrayDays = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
                        "Saturday" };
                for (int i = 0; i < arrayDays.length; i++) {
                    if (fromCheckin == arrayDays[i]) {
                        j = i;
                    } else if (toCheckin == arrayDays[i]) {
                        l = i;
                    }
                }
                ArrayList<Integer> days = new ArrayList<Integer>();
                days.add(j);
                int temfromday = j;
                days.add(l);

                int difference = CheckForDay(fromCheckin, toCheckin);
                if (difference > 0) {
                    for (int k = 0; k < difference; k++) {
                        j = j + 1;
                        if (j == 7) {
                            j = 0;
                        }
                        days.add(j);

                    }
                }
                List<DBObject> categoryIdList = new ArrayList<DBObject>();
                for (String t : finalCat) {
                    BasicDBObject whereQueryBusiness = new BasicDBObject();
                    BasicDBObject fieldsBusiness = new BasicDBObject();
                    fieldsBusiness.put("business_id", 1);
                    whereQueryBusiness.put("categories", t);
                    DBCursor cursorForBusiness = collBusiness.find(whereQueryBusiness, fieldsBusiness);
                    finalQuery.append(whereQueryBusiness);
                    while (cursorForBusiness.hasNext()) {
                        int i = 1;
                        categoryIdList.add(cursorForBusiness.next());
                        i++;
                    }
                } //for FINALCAT
                List<DBObject> checkinCategoryIdList = new ArrayList<DBObject>();
                for (DBObject s : categoryIdList) {
                    //System.out.println(s.get("business_id"));
                    BasicDBObject whereQueryCheckin = new BasicDBObject();
                    whereQueryCheckin.put("business_id", s.get("business_id"));
                    DBCursor cursorForCheckin = collCheckin.find(whereQueryCheckin);
                    while (cursorForCheckin.hasNext()) {
                        int i = 1;
                        checkinCategoryIdList.add(cursorForCheckin.next());
                        i++;
                    }
                } //for DBObject s:categoryIdList
                for (DBObject u : checkinCategoryIdList) {
                    String full = u.get("checkin_info").toString();
                    String a = full.replaceAll("[{}]", "");
                    String[] b = a.split(",");
                    for (int x = 0; x < b.length; x++) {
                        CheckinDetail objCheckin = new CheckinDetail();
                        String[] c = b[x].split(":");

                        String d = c[0].replaceAll("[\"]", "");
                        String[] e = d.split("-");
                        objCheckin.b_Id = u.get("business_id").toString();
                        objCheckin.fromTime = Integer.parseInt(e[0].replaceAll("\\s+", ""));
                        objCheckin.checkinDay = Integer.parseInt(e[1].replaceAll("\\s+", ""));
                        objCheckin.CountValue = Integer.parseInt(c[1].replaceAll("\\s+", ""));
                        ;
                        checkinList.add(objCheckin);
                    }
                }

                for (CheckinDetail e : checkinList) {
                    for (int f : days) {
                        if ((f == temfromday && temfromday == e.checkinDay
                                && Integer.parseInt(fromCheckinHour) <= e.fromTime)
                                || (f == l && l == e.checkinDay
                                        && Integer.parseInt(toCheckinHour) >= e.fromTime)
                                || (f == e.checkinDay && f != temfromday && f != l)) {
                            //                                    System.out.println(e.b_Id);
                            //                                    System.out.println(e.CountValue);
                            if (tempCheckin.containsKey(e.b_Id)) {
                                tempCheckin.put(e.b_Id, tempCheckin.get(e.b_Id) + e.CountValue);
                            } else {
                                tempCheckin.put(e.b_Id, e.CountValue);
                            }

                        }
                    }
                }

                Iterator itr = tempCheckin.entrySet().iterator();
                while (itr.hasNext()) {
                    Map.Entry entry = (Map.Entry) itr.next();
                    if ((operationCheckin.contains("="))) {
                        if (entry.getValue() == valueCheckin) {
                            finalCheckinBid.add(entry.getKey().toString());
                        }
                    }
                    if ((operationCheckin.contains("<"))) {
                        if (Integer.parseInt(entry.getValue().toString()) < Integer.parseInt(valueCheckin)) {
                            finalCheckinBid.add(entry.getKey().toString());
                            //System.out.println("in <");
                        }
                    }
                    if ((operationCheckin.contains(">"))) {
                        if (Integer.parseInt(entry.getValue().toString()) > Integer.parseInt(valueCheckin)) {
                            finalCheckinBid.add(entry.getKey().toString());
                            //System.out.println("in >");
                        }
                    }
                }
                //abhi tak ki bid is in finalCheckinBid
                //                    for(String a :finalCheckinBid){
                //                    System.out.println(a);
                //                    }
                finalQuery.append(
                        "Stage{name='$match', value=Or Filter{filters=[Operator Filter{fieldName='checkin_info.2-3', operator='$exists', value=BsonBoolean{value=true}}, Operator Filter{fieldName='checkin_info.2-4', operator='$exists', value=BsonBoolean{value=true}}]}}\n"
                                + "Document{{$group=Document{{_id=$business_id, total1=Document{{$sum=$checkin_info.2-4}}, total2=Document{{$sum=$checkin_info.2-3}}}}}}\n"
                                + "Stage{name='$match', value=Operator Filter{fieldName='totalCheckins', operator='$gt', value=4}}");
                try {
                    List<Object> reviewCategoryIdList = new ArrayList<Object>();

                    DBObject match = new BasicDBObject("$match",
                            new BasicDBObject("date", new BasicDBObject("$gt", format.parse(fromdate))
                                    .append("$lt", format.parse(todate))));

                    DBObject groupFields = new BasicDBObject("_id", "$business_id");
                    groupFields.put("total1", new BasicDBObject("$sum", "$votes.funny"));
                    groupFields.put("total2", new BasicDBObject("$sum", "$votes.useful"));
                    groupFields.put("total3", new BasicDBObject("$sum", "$votes.cool"));
                    groupFields.put("totalStars", new BasicDBObject("$sum", "$stars"));
                    DBObject group = new BasicDBObject("$group", groupFields);

                    DBObject fields = new BasicDBObject("_id", 1);
                    BasicDBList addFields = new BasicDBList();
                    addFields.add("$total1");
                    addFields.add("$total2");
                    addFields.add("$total3");
                    fields.put("totalVotes", new BasicDBObject("$sum", addFields));
                    fields.put("totalStars", 1);
                    DBObject project = new BasicDBObject("$project", fields);
                    BasicDBObject votes = null;
                    BasicDBObject stars = null;
                    if (operationStar.equals(">")) {
                        stars = new BasicDBObject("totalStars", new BasicDBObject("$gt", starValue));
                    }
                    if (operationStar.equals("<")) {
                        stars = new BasicDBObject("totalStars", new BasicDBObject("$lt", starValue));
                    }
                    if (operationStar.equals("=")) {
                        stars = new BasicDBObject("totalStars", new BasicDBObject("$eq", starValue));
                    }
                    if (operationVote.equals(">")) {
                        votes = new BasicDBObject("totalVotes", new BasicDBObject("$gt", voteValue));
                    }
                    if (operationVote.equals("<")) {
                        votes = new BasicDBObject("totalVotes", new BasicDBObject("$lt", voteValue));
                    }
                    if (operationVote.equals("=")) {
                        votes = new BasicDBObject("totalVotes", new BasicDBObject("$eq", voteValue));
                    }
                    List<BasicDBObject> list1 = new ArrayList<BasicDBObject>();
                    list1.add(new BasicDBObject(votes));
                    list1.add(new BasicDBObject(stars));
                    DBObject votesnStars = new BasicDBObject("$and", list1);
                    DBObject match2 = new BasicDBObject("$match", votesnStars);

                    AggregationOutput cursorForReview = collReview.aggregate(match, group, project, match2);
                    String query33 = match + "\n" + group + "\n" + project + "\n" + match2;
                    finalQuery.append(query33);

                    Iterable<DBObject> list = cursorForReview.results();
                    Iterator<DBObject> resultSet1 = list.iterator();
                    while (resultSet1.hasNext()) {
                        //                            System.out.println(resultSet1.next().get("_id"));
                        reviewCategoryIdList.add(resultSet1.next().get("_id"));
                    }
                    //                            System.out.println(reviewCategoryIdList.size());
                    //                            System.out.println(finalCheckinBid.size());
                    reviewCategoryIdList.retainAll(finalCheckinBid);
                    //                            System.out.println(reviewCategoryIdList.size());
                    //                        for (Object s : reviewCategoryIdList) { 
                    //                        System.out.println(s.toString());
                    //                        }

                    if (!Address.isEmpty() && !proximity.isEmpty()) {

                        if (Address.contains("3799 S Las Vegas Blvd Eastside Las Vegas, NV 89119")) {
                            longitude = -115.16768879999999;
                            latitude = 36.103017899999998;
                        }

                        if (Address.equalsIgnoreCase(
                                "6002 S Durango Dr Ste 100 Spring Valley Las Vegas, NV 89113")) {
                            longitude = -115.27906539999999;
                            latitude = 36.079256100000002;
                        }

                        if (Address.equalsIgnoreCase("1801 E Baseline Rd, #101 Ste 101 Tempe, AZ 85283")) {
                            longitude = -111.90860979259;
                            latitude = 33.377052104372098;
                        }

                        if (Address.equalsIgnoreCase("1033 S Park St Bay Creek Madison, WI 53715")) {
                            longitude = -89.397478300000003;
                            latitude = 43.055539400000001;
                        }

                        if (Address.equalsIgnoreCase("University Center II Lot Phoenix, AZ 85008")) {
                            longitude = -112.02540759999999;
                            latitude = 33.451857400000002;
                        }

                        List<String> pointInterest = new ArrayList<String>();
                        BasicDBList geoCoord = new BasicDBList();

                        geoCoord.add(longitude);
                        geoCoord.add(latitude);

                        BasicDBList geoParams = new BasicDBList();
                        geoParams.add(geoCoord);
                        geoParams.add(Integer.parseInt(proximity) / 1018.59);

                        BasicDBObject query = new BasicDBObject("loc",
                                new BasicDBObject("$geoWithin", new BasicDBObject("$center", geoParams)));

                        DBCursor cursorForBusiness = collBusiness.find(query);
                        finalQuery.append(query);
                        while (cursorForBusiness.hasNext()) {
                            pointInterest.add(cursorForBusiness.next().get("business_id").toString());

                        }
                        //                System.out.println(pointInterest.size());
                        //                System.out.println(reviewCategoryIdList.size());
                        reviewCategoryIdList.retainAll(pointInterest);
                        //                System.out.println(reviewCategoryIdList.size());
                    }

                    List<DBObject> outputMyList = new ArrayList<DBObject>();
                    BasicDBObject whereQuery = new BasicDBObject();
                    for (Object fianlBid2 : reviewCategoryIdList) {
                        //                        System.out.println(fianlBid2);
                        whereQuery.put("business_id", fianlBid2.toString());
                        DBCursor cursor = collBusiness.find(whereQuery);
                        while (cursor.hasNext()) {
                            //System.out.println(cursor.next());
                            outputMyList.add(cursor.next());
                        }
                    }
                    queryLabel.setText("<html><p>" + finalQuery + "</p></html>");
                    resultTable.setModel(dtm);
                    String header[] = new String[] { "B_ID", "Business", "City", "State", "Stars" };
                    // add header in table model     
                    dtm.setColumnIdentifiers(header);
                    for (DBObject temp : outputMyList) {
                        //System.out.println("Business Name : " + temp.get("name") + " Category :  " + temp.get("categories"));
                        Object[] row = new Object[5];
                        row[0] = temp.get("business_id");
                        row[1] = temp.get("name");
                        row[2] = temp.get("city");
                        row[3] = temp.get("state");
                        row[4] = temp.get("stars");

                        dtm.addRow(row);
                    }
                } catch (Exception e) {

                }
            } //review if
              ///////////////////////////////Category and Checkin///////////////////////////////
            else {//Check in with cat not review
                int j = 0;
                int l = 0;

                HashMap<String, Integer> tempCheckin = new HashMap<String, Integer>();
                ArrayList<String> finalCheckinBid = new ArrayList<String>();
                StringBuffer finalQueryCatCheck = new StringBuffer();
                ArrayList<CheckinDetail> checkinList = new ArrayList<CheckinDetail>();
                //System.out.println("I am in checkin box");
                String[] arrayDays = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
                        "Saturday" };
                for (int i = 0; i < arrayDays.length; i++) {
                    if (fromCheckin == arrayDays[i]) {
                        j = i;
                    } else if (toCheckin == arrayDays[i]) {
                        l = i;
                    }
                }
                ArrayList<Integer> days = new ArrayList<Integer>();
                days.add(j);
                int temfromday = j;
                days.add(l);

                //                         System.out.println("Input Data "+j+"  "+fromCheckinHour+"  "+toCheckin+"  "+toCheckinHour+" "+
                //                                        operationCheckin+"  "+valueCheckin);
                //               System.out.println(j);         
                int difference = CheckForDay(fromCheckin, toCheckin);
                if (difference > 0) {
                    for (int k = 0; k < difference; k++) {
                        j = j + 1;
                        if (j == 7) {
                            j = 0;
                        }
                        days.add(j);

                    }
                }
                //                        for(int q:days){
                //                        System.out.println(q);
                //                        }

                List<DBObject> categoryIdList = new ArrayList<DBObject>();
                for (String t : finalCat) {
                    BasicDBObject whereQueryBusiness = new BasicDBObject();
                    BasicDBObject fieldsBusiness = new BasicDBObject();
                    fieldsBusiness.put("business_id", 1);
                    whereQueryBusiness.put("categories", t);
                    DBCursor cursorForBusiness = collBusiness.find(whereQueryBusiness, fieldsBusiness);
                    finalQueryCatCheck.append(whereQueryBusiness);
                    while (cursorForBusiness.hasNext()) {
                        int i = 1;
                        categoryIdList.add(cursorForBusiness.next());
                        i++;
                    }
                } //for FINALCAT
                List<DBObject> checkinCategoryIdList = new ArrayList<DBObject>();
                for (DBObject s : categoryIdList) {
                    //System.out.println(s.get("business_id"));
                    BasicDBObject whereQueryCheckin = new BasicDBObject();
                    whereQueryCheckin.put("business_id", s.get("business_id"));
                    DBCursor cursorForCheckin = collCheckin.find(whereQueryCheckin);
                    while (cursorForCheckin.hasNext()) {
                        int i = 1;
                        checkinCategoryIdList.add(cursorForCheckin.next());
                        i++;
                    }
                } //for DBObject s:categoryIdList
                for (DBObject u : checkinCategoryIdList) {
                    //                                System.out.println(s.get("business_id"));    
                    //                                System.out.println(u.get("checkin_info").toString());

                    String full = u.get("checkin_info").toString();
                    String a = full.replaceAll("[{}]", "");
                    String[] b = a.split(",");
                    for (int x = 0; x < b.length; x++) {
                        CheckinDetail objCheckin = new CheckinDetail();
                        String[] c = b[x].split(":");

                        String d = c[0].replaceAll("[\"]", "");
                        String[] e = d.split("-");
                        objCheckin.b_Id = u.get("business_id").toString();
                        //                                        System.out.println(u.get("business_id").toString());
                        //                                        System.out.println(e[0]);//from time
                        objCheckin.fromTime = Integer.parseInt(e[0].replaceAll("\\s+", ""));
                        //                                        System.out.println(e[1]);//day
                        objCheckin.checkinDay = Integer.parseInt(e[1].replaceAll("\\s+", ""));
                        //                                        System.out.println(c[1]);//value
                        objCheckin.CountValue = Integer.parseInt(c[1].replaceAll("\\s+", ""));
                        ;
                        checkinList.add(objCheckin);
                        //System.out.println(checkinList.size());
                    }
                }

                for (CheckinDetail e : checkinList) {

                    for (int f : days) {

                        if ((f == temfromday && temfromday == e.checkinDay
                                && Integer.parseInt(fromCheckinHour) <= e.fromTime)
                                || (f == l && l == e.checkinDay
                                        && Integer.parseInt(toCheckinHour) >= e.fromTime)
                                || (f == e.checkinDay && f != temfromday && f != l)) {
                            //                                    System.out.println(e.b_Id);
                            //                                    System.out.println(e.CountValue);
                            if (tempCheckin.containsKey(e.b_Id)) {
                                tempCheckin.put(e.b_Id, tempCheckin.get(e.b_Id) + e.CountValue);
                            } else {
                                tempCheckin.put(e.b_Id, e.CountValue);
                            }

                        }
                    }
                }

                Iterator itr = tempCheckin.entrySet().iterator();
                while (itr.hasNext()) {
                    Map.Entry entry = (Map.Entry) itr.next();
                    if ((operationCheckin.contains("="))) {
                        if (entry.getValue() == valueCheckin) {
                            finalCheckinBid.add(entry.getKey().toString());
                        }
                    }
                    if ((operationCheckin.contains("<"))) {
                        if (Integer.parseInt(entry.getValue().toString()) < Integer.parseInt(valueCheckin)) {
                            finalCheckinBid.add(entry.getKey().toString());
                            //System.out.println("in <");
                        }
                    }
                    if ((operationCheckin.contains(">"))) {
                        if (Integer.parseInt(entry.getValue().toString()) > Integer.parseInt(valueCheckin)) {
                            finalCheckinBid.add(entry.getKey().toString());
                            //System.out.println("in >");
                        }
                    }

                    //                            
                }
                finalQueryCatCheck.append(
                        "Stage{name='$match', value=Or Filter{filters=[Operator Filter{fieldName='checkin_info.2-3', operator='$exists', value=BsonBoolean{value=true}}, Operator Filter{fieldName='checkin_info.2-4', operator='$exists', value=BsonBoolean{value=true}}]}}\n"
                                + "Document{{$group=Document{{_id=$business_id, total1=Document{{$sum=$checkin_info.2-4}}, total2=Document{{$sum=$checkin_info.2-3}}}}}}\n"
                                + "Stage{name='$match', value=Operator Filter{fieldName='totalCheckins', operator='$gt', value=4}}");
                if (!Address.isEmpty() && !proximity.isEmpty()) {

                    if (Address.contains("3799 S Las Vegas Blvd Eastside Las Vegas, NV 89119")) {
                        longitude = -115.16768879999999;
                        latitude = 36.103017899999998;
                    }

                    if (Address
                            .equalsIgnoreCase("6002 S Durango Dr Ste 100 Spring Valley Las Vegas, NV 89113")) {
                        longitude = -115.27906539999999;
                        latitude = 36.079256100000002;
                    }

                    if (Address.equalsIgnoreCase("1801 E Baseline Rd, #101 Ste 101 Tempe, AZ 85283")) {
                        longitude = -111.90860979259;
                        latitude = 33.377052104372098;
                    }

                    if (Address.equalsIgnoreCase("1033 S Park St Bay Creek Madison, WI 53715")) {
                        longitude = -89.397478300000003;
                        latitude = 43.055539400000001;
                    }

                    if (Address.equalsIgnoreCase("University Center II Lot Phoenix, AZ 85008")) {
                        longitude = -112.02540759999999;
                        latitude = 33.451857400000002;
                    }

                    List<String> pointInterest = new ArrayList<String>();
                    BasicDBList geoCoord = new BasicDBList();

                    geoCoord.add(longitude);
                    geoCoord.add(latitude);

                    BasicDBList geoParams = new BasicDBList();
                    geoParams.add(geoCoord);
                    geoParams.add(Integer.parseInt(proximity) / 1018.59);

                    BasicDBObject query = new BasicDBObject("loc",
                            new BasicDBObject("$geoWithin", new BasicDBObject("$center", geoParams)));

                    DBCursor cursorForBusiness = collBusiness.find(query);
                    finalQueryCatCheck.append(query);
                    while (cursorForBusiness.hasNext()) {
                        pointInterest.add(cursorForBusiness.next().get("business_id").toString());

                    }
                    //                System.out.println(pointInterest.size());
                    //                System.out.println(reviewCategoryIdList.size());
                    finalCheckinBid.retainAll(pointInterest);
                    //                System.out.println(reviewCategoryIdList.size());
                }

                resultTable.setModel(dtm);
                queryLabel.setText("<html><p>" + finalQueryCatCheck.toString() + "</p></html>");
                String header[] = new String[] { "B_ID", "Business", "City", "State", "Stars" };

                // add header in table model     
                dtm.setColumnIdentifiers(header);
                List<DBObject> outputMyList = new ArrayList<DBObject>();
                BasicDBObject whereQuery = new BasicDBObject();
                for (String fianlBid2 : finalCheckinBid) {
                    whereQuery.put("business_id", fianlBid2);
                    DBCursor cursor = collBusiness.find(whereQuery);
                    while (cursor.hasNext()) {
                        int i = 1;
                        //System.out.println(cursor.next());
                        outputMyList.add(cursor.next());
                        i++;
                    }
                }

                for (DBObject temp : outputMyList) {
                    //System.out.println("Business Name : " + temp.get("name") + " Category :  " + temp.get("categories"));
                    Object[] row = new Object[5];
                    row[0] = temp.get("business_id");
                    row[1] = temp.get("name");
                    row[2] = temp.get("city");
                    row[3] = temp.get("state");
                    row[4] = temp.get("stars");

                    dtm.addRow(row);
                }
                // }
            } //else with no review
        } //if for entire checkin check
        else {//only cat

            /////////////////////////////////////////Cat N Review/////////////////////////////////////////////////////////////////////
            if (!fromReview.isEmpty() && !toReview.isEmpty() && !operationStar.isEmpty() && !valueStar.isEmpty()
                    && !operationVote.isEmpty() && !valueVote.isEmpty()) {
                StringBuffer finalQueryCatReview = new StringBuffer();
                DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH);
                String fromDate1 = fromReview;
                String fromdate = fromDate1 + "T00:00:00Z";
                String toDate1 = toReview;
                String todate = toDate1 + "T00:00:00Z";
                int starValue = Integer.parseInt(valueStar);
                //int voteValue = 4;
                int voteValue = Integer.parseInt(valueVote);
                DB dbReview = mongoClient.getDB("review");
                DBCollection collReview = dbReview.getCollection("review");

                //abhi tak ki bid is in finalCheckinBid
                //                    for(String a :finalCheckinBid){
                //                    System.out.println(a);
                //                    }
                try {
                    List<Object> finalCatBid = new ArrayList<Object>();
                    List<Object> reviewCategoryIdList = new ArrayList<Object>();
                    for (String a : finalCat) {

                        BasicDBObject whereQueryBusinessReview = new BasicDBObject();
                        //System.out.println(a);
                        whereQueryBusinessReview.put("categories", a);
                        DBCursor cursor = collBusiness.find(whereQueryBusinessReview);
                        finalQueryCatReview.append(whereQueryBusinessReview);
                        while (cursor.hasNext()) {
                            int i = 1;
                            //System.out.println(cursor.next());
                            finalCatBid.add(cursor.next().get("business_id"));
                            i++;
                        }
                    }
                    DBObject match = new BasicDBObject("$match",
                            new BasicDBObject("date", new BasicDBObject("$gt", format.parse(fromdate))
                                    .append("$lt", format.parse(todate))));

                    DBObject groupFields = new BasicDBObject("_id", "$business_id");
                    groupFields.put("total1", new BasicDBObject("$sum", "$votes.funny"));
                    groupFields.put("total2", new BasicDBObject("$sum", "$votes.useful"));
                    groupFields.put("total3", new BasicDBObject("$sum", "$votes.cool"));
                    groupFields.put("totalStars", new BasicDBObject("$sum", "$stars"));
                    DBObject group = new BasicDBObject("$group", groupFields);

                    DBObject fields = new BasicDBObject("_id", 1);
                    BasicDBList addFields = new BasicDBList();
                    addFields.add("$total1");
                    addFields.add("$total2");
                    addFields.add("$total3");
                    fields.put("totalVotes", new BasicDBObject("$sum", addFields));
                    fields.put("totalStars", 1);
                    DBObject project = new BasicDBObject("$project", fields);
                    BasicDBObject votes = null;
                    BasicDBObject stars = null;
                    if (operationStar.equals(">")) {
                        stars = new BasicDBObject("totalStars", new BasicDBObject("$gt", starValue));
                    }
                    if (operationStar.equals("<")) {
                        stars = new BasicDBObject("totalStars", new BasicDBObject("$lt", starValue));
                    }
                    if (operationStar.equals("=")) {
                        stars = new BasicDBObject("totalStars", new BasicDBObject("$eq", starValue));
                    }
                    if (operationVote.equals(">")) {
                        votes = new BasicDBObject("totalVotes", new BasicDBObject("$gt", voteValue));
                    }
                    if (operationVote.equals("<")) {
                        votes = new BasicDBObject("totalVotes", new BasicDBObject("$lt", voteValue));
                    }
                    if (operationVote.equals("=")) {
                        votes = new BasicDBObject("totalVotes", new BasicDBObject("$eq", voteValue));
                    }
                    List<BasicDBObject> list1 = new ArrayList<BasicDBObject>();
                    list1.add(new BasicDBObject(votes));
                    list1.add(new BasicDBObject(stars));
                    DBObject votesnStars = new BasicDBObject("$and", list1);
                    DBObject match2 = new BasicDBObject("$match", votesnStars);

                    AggregationOutput cursorForReview = collReview.aggregate(match, group, project, match2);
                    String query33 = match + "\n" + group + "\n" + project + "\n" + match2;
                    finalQueryCatReview.append(query33);
                    Iterable<DBObject> list = cursorForReview.results();
                    Iterator<DBObject> resultSet1 = list.iterator();
                    while (resultSet1.hasNext()) {
                        //                            System.out.println(resultSet1.next().get("_id"));
                        reviewCategoryIdList.add(resultSet1.next().get("_id"));
                    }
                    //System.out.println(reviewCategoryIdList.size());
                    //System.out.println(finalCatBid.size());
                    reviewCategoryIdList.retainAll(finalCatBid);
                    //System.out.println(reviewCategoryIdList.size());
                    //                        for (Object s : reviewCategoryIdList) { 
                    //                        System.out.println(s.toString());
                    //                        }
                    if (!Address.isEmpty() && !proximity.isEmpty()) {

                        if (Address.contains("3799 S Las Vegas Blvd Eastside Las Vegas, NV 89119")) {
                            longitude = -115.16768879999999;
                            latitude = 36.103017899999998;
                        }

                        if (Address.equalsIgnoreCase(
                                "6002 S Durango Dr Ste 100 Spring Valley Las Vegas, NV 89113")) {
                            longitude = -115.27906539999999;
                            latitude = 36.079256100000002;
                        }

                        if (Address.equalsIgnoreCase("1801 E Baseline Rd, #101 Ste 101 Tempe, AZ 85283")) {
                            longitude = -111.90860979259;
                            latitude = 33.377052104372098;
                        }

                        if (Address.equalsIgnoreCase("1033 S Park St Bay Creek Madison, WI 53715")) {
                            longitude = -89.397478300000003;
                            latitude = 43.055539400000001;
                        }

                        if (Address.equalsIgnoreCase("University Center II Lot Phoenix, AZ 85008")) {
                            longitude = -112.02540759999999;
                            latitude = 33.451857400000002;
                        }

                        List<String> pointInterest = new ArrayList<String>();
                        BasicDBList geoCoord = new BasicDBList();

                        geoCoord.add(longitude);
                        geoCoord.add(latitude);

                        BasicDBList geoParams = new BasicDBList();
                        geoParams.add(geoCoord);
                        geoParams.add(Integer.parseInt(proximity) / 1018.59);

                        BasicDBObject query = new BasicDBObject("loc",
                                new BasicDBObject("$geoWithin", new BasicDBObject("$center", geoParams)));

                        DBCursor cursorForBusiness = collBusiness.find(query);
                        finalQueryCatReview.append(query);
                        while (cursorForBusiness.hasNext()) {
                            pointInterest.add(cursorForBusiness.next().get("business_id").toString());

                        }
                        //                System.out.println(pointInterest.size());
                        //                System.out.println(reviewCategoryIdList.size());
                        reviewCategoryIdList.retainAll(pointInterest);
                        //                System.out.println(reviewCategoryIdList.size());
                    }
                    queryLabel.setText("<html><p>" + finalQueryCatReview.toString() + "</p></html>");
                    resultTable.setModel(dtm);

                    String header[] = new String[] { "B_ID", "Business", "City", "State", "Stars" };

                    // add header in table model     
                    dtm.setColumnIdentifiers(header);
                    List<DBObject> outputMyList = new ArrayList<DBObject>();
                    for (Object fianlBid2 : reviewCategoryIdList) {
                        BasicDBObject whereQuery = new BasicDBObject();

                        //                        System.out.println(fianlBid2);
                        whereQuery.put("business_id", fianlBid2.toString());
                        DBCursor cursor = collBusiness.find(whereQuery);
                        while (cursor.hasNext()) {
                            //System.out.println(cursor.next());
                            outputMyList.add(cursor.next());
                        }
                    }

                    for (DBObject temp : outputMyList) {
                        //System.out.println("Business Name : " + temp.get("name") + " Category :  " + temp.get("categories"));
                        Object[] row = new Object[5];
                        row[0] = temp.get("business_id");
                        row[1] = temp.get("name");
                        row[2] = temp.get("city");
                        row[3] = temp.get("state");
                        row[4] = temp.get("stars");

                        dtm.addRow(row);
                    }
                } catch (Exception e) {

                }
            } //////////////////////////////////////Only Category ////////////////////////////////////////////
            else {
                resultTable.setModel(dtm);
                String header[] = new String[] { "B_ID", "Business", "City", "State", "Stars", "Category" };
                // add header in table model     
                dtm.setColumnIdentifiers(header);
                StringBuffer catOnly = new StringBuffer();
                if (!Address.isEmpty() && !proximity.isEmpty() && finalCat.size() > 0) {
                    if (Address.contains("3799 S Las Vegas Blvd Eastside Las Vegas, NV 89119")) {
                        longitude = -115.16768879999999;
                        latitude = 36.103017899999998;
                    }

                    if (Address
                            .equalsIgnoreCase("6002 S Durango Dr Ste 100 Spring Valley Las Vegas, NV 89113")) {
                        longitude = -115.27906539999999;
                        latitude = 36.079256100000002;
                    }

                    if (Address.equalsIgnoreCase("1801 E Baseline Rd, #101 Ste 101 Tempe, AZ 85283")) {
                        longitude = -111.90860979259;
                        latitude = 33.377052104372098;
                    }

                    if (Address.equalsIgnoreCase("1033 S Park St Bay Creek Madison, WI 53715")) {
                        longitude = -89.397478300000003;
                        latitude = 43.055539400000001;
                    }

                    if (Address.equalsIgnoreCase("University Center II Lot Phoenix, AZ 85008")) {
                        longitude = -112.02540759999999;
                        latitude = 33.451857400000002;
                    }
                    //BasicDBList category = new BasicDBList();
                    for (String a : finalCat) {

                        BasicDBObject andQuery = new BasicDBObject();
                        List<BasicDBObject> obj = new ArrayList<BasicDBObject>();

                        List<DBObject> pointInterest = new ArrayList<DBObject>();
                        BasicDBList geoCoord = new BasicDBList();

                        geoCoord.add(longitude);
                        geoCoord.add(latitude);

                        BasicDBList geoParams = new BasicDBList();
                        geoParams.add(geoCoord);
                        geoParams.add(Integer.parseInt(proximity) / 1018.59);

                        BasicDBObject query = new BasicDBObject("loc",
                                new BasicDBObject("$geoWithin", new BasicDBObject("$center", geoParams)));
                        obj.add(query);
                        obj.add(new BasicDBObject("categories", a));
                        andQuery.put("$and", obj);
                        System.out.println(andQuery);
                        DBCursor cursorForBusiness = collBusiness.find(andQuery);
                        catOnly.append(andQuery);
                        while (cursorForBusiness.hasNext()) {
                            pointInterest.add(cursorForBusiness.next());

                        }
                        for (DBObject temp : pointInterest) {

                            Object[] row = new Object[6];
                            row[0] = temp.get("business_id");
                            row[1] = temp.get("name");
                            row[2] = temp.get("city");
                            row[3] = temp.get("state");
                            row[4] = temp.get("stars");
                            row[5] = a;

                            dtm.addRow(row);
                        }
                    }
                } else {
                    List<DBObject> testMyList = new ArrayList<DBObject>();
                    for (String a : finalCat) {
                        BasicDBObject whereQuery = new BasicDBObject();
                        //System.out.println(a);
                        whereQuery.put("categories", a);
                        DBCursor cursor = collBusiness.find(whereQuery);
                        catOnly.append(whereQuery);
                        while (cursor.hasNext()) {
                            testMyList.add(cursor.next());

                        }

                        for (DBObject temp : testMyList) {
                            //System.out.println("Business Name : " + temp.get("name") + " Category :  " + temp.get("categories"));
                            Object[] row = new Object[6];
                            row[0] = temp.get("business_id");
                            row[1] = temp.get("name");
                            row[2] = temp.get("city");
                            row[3] = temp.get("state");
                            row[4] = temp.get("stars");
                            row[5] = a;

                            dtm.addRow(row);
                        }
                    }

                }
                queryLabel.setText("<html><p>" + catOnly.toString() + "</p></html>");
            }
        } //else
    } //cat and subCat is selected

}