@Override public AggregationPipeline bucket(final String field, final List<?> boundaries) { return bucket(field, boundaries, new BucketOptions()); }
@Override public AggregationPipeline bucket(final String field, final List<?> boundaries, final BucketOptions options) { if (boundaries == null || boundaries.size() < 2) { throw new RuntimeException("Boundaries list should be present and has at least 2 elements"); } DBObject dbObject = options.toDBObject(); dbObject.put("groupBy", "$" + field); dbObject.put("boundaries", boundaries); stages.add(new BasicDBObject("$bucket", dbObject)); return this; }
@Test(expected = RuntimeException.class) public void testBucketWithUnsortedBoundaries() { checkMinServerVersion(3.4); getDs().save(asList(new Book("The Banquet", "Dante", 2), new Book("Divine Comedy", "Dante", 1), new Book("Eclogues", "Dante", 2), new Book("The Odyssey", "Homer", 10), new Book("Iliad", "Homer", 10))); Iterator<BucketResult> aggregate = getDs().createAggregation(Book.class) .bucket("copies", Arrays.asList(5, 1, 10), new BucketOptions() .defaultField("test") .output("count") .sum(1)) .aggregate(BucketResult.class); }
@Test(expected = RuntimeException.class) public void testBucketWithBoundariesWithSizeLessThanTwo() { checkMinServerVersion(3.4); getDs().save(asList(new Book("The Banquet", "Dante", 2), new Book("Divine Comedy", "Dante", 1), new Book("Eclogues", "Dante", 2), new Book("The Odyssey", "Homer", 10), new Book("Iliad", "Homer", 10))); Iterator<BucketResult> aggregate = getDs().createAggregation(Book.class) .bucket("copies", Arrays.asList(10), new BucketOptions() .defaultField("test") .output("count") .sum(1)) .aggregate(BucketResult.class); }
@Test public void testBucketWithOptions() { getDs().save(asList(new Book("The Banquet", "Dante", 2), new Book("Divine Comedy", "Dante", 1), new Book("Eclogues", "Dante", 2), new Book("The Odyssey", "Homer", 10), new Book("Iliad", "Homer", 10))); Iterator<BucketResult> aggregate = getDs().createAggregation(Book.class) .bucket("copies", Arrays.asList(1, 5, 10), new BucketOptions() .defaultField("test") .output("count").sum(1)) .aggregate(BucketResult.class); BucketResult result1 = aggregate.next(); assertEquals(result1.id, "1"); assertEquals(result1.count, 3); BucketResult result2 = aggregate.next(); assertEquals(result2.id, "test"); assertEquals(result2.count, 2); }