使用mongo-java-driver的字段的最大值

时间:2017-10-21 13:26:28

标签: java mongodb

我希望获得整个集合df <- tribble(~X1, ~X2, ~X3, 1, 1, 8, 2, 4, 8, 3, 4, 8, 4, 90, 199, 5, 3, 9, 6, 3, 9) df2 <- df %>% group_by(X2, X3) %>% count() %>% ungroup() df2 # A tibble: 4 x 3 # X2 X3 n # <dbl> <dbl> <int> #1 1 8 1 #2 3 9 2 #3 4 8 2 #4 90 199 1 df2 %>% filter(n>1) %>% select(-n) %>% left_join(df, by = c("X2","X3")) # A tibble: 4 x 3 # X2 X3 X1 # <dbl> <dbl> <dbl> #1 3 9 5 #2 3 9 6 #3 4 8 2 #4 4 8 3 的{​​{1}}字段的最大值。

在mongo shell中我可以写:

date

并返回一个日期为4programmers的文档,但是当我用java编写时:

db.getCollection("4programmers").aggregate([
    {
        $group:
        {
            _id: null,
            max : {$max:  "$date"}
        }
    }
])

因此我得到:ISODate("2017-10-20T17:12:37.000+02:00")

Date d = collection.aggregate( Arrays.asList( Aggregates.group("$date", Accumulators.max("maxx", "$date")) ) ).first().getDate("maxx"); System.out.println(d); 可能出现问题?

1 个答案:

答案 0 :(得分:1)

Aggregates.group的第一个参数应为null而不是“$ date”(实际上是_id: null)。 因此代码应如下所示:

Date d = collection.aggregate(
                Arrays.asList(
                        Aggregates.group(null, Accumulators.max("maxx", "$date"))
                        )
                ).first().getDate("maxx");

或者你可以在没有Aggregates类的情况下做同样的事情:

collection.aggregate(asList(new Document("$group", new Document("_id", null)
                .append("max", new Document("$max", "$date")))))
                .first().getDate("max");