Java 用Jongo解组聚合结果

Java 用Jongo解组聚合结果,java,mongodb,jongo,mongo-jackson-mapper,Java,Mongodb,Jongo,Mongo Jackson Mapper,我使用MongoDB聚合框架查询文档,结果如下: { "result" : [ { "_id" : "luke", "times" : 8 }, { "_id" : "albert", "time

我使用MongoDB聚合框架查询文档,结果如下:

{
        "result" : [
                {
                        "_id" : "luke",
                        "times" : 8
                },
                {
                        "_id" : "albert",
                        "times" : 4
                },
                {
                        "_id" : "matt",
                        "times" : 4
                }
        ],
        "ok" : 1
}
List<AggregateResult> res =  gamesCollection.aggregate(
                "{ ... }"
                ).as(AggregateResult.class);
从上面的结果可以看出,查询在mongoDB shell中工作,但我在使用Jongo获取结果时遇到了一个问题:

        Aggregationoutput = 
                gamesCollection.aggregate(
                "{ ... }"
                ).as(Aggregation.class);
        output.results().iterator().hasNext();
主要问题似乎是Jongo不允许我使用AggregationOutput?他想要的是。。。但是找不到任何关于如何使用它的例子

编辑: 我有点沮丧,因为我不能让乔恩去工作。我必须使用MongoDB Java驱动程序中指定的DBObjects编写查询,但代码看起来非常难看

编辑2: 为了补充信息,这是我与Jongo一起使用的原始聚合,无法将其解组到ResultObject

List<ResultObject> output = 
                gamesCollection.aggregate(
                "{ $match: { 'playersList.playerid': 'bob' }},"
                +"{ $unwind: '$playersList' },"
                +"{ $match: { 'playersList.playerid':  { $ne: 'bob' } } },"
                +"{ $group: { _id: '$playersList.playerid', times: { $sum : 1} } },"
                +"{ $sort: { times: -1 } }"
                ).as(ResultObject.class);

class ResultObject{
  String _id;
  int times;
}

}

您可以使用诸如find/findOne之类的聚合功能。。。结果将自动解组到Pojo中:

List<Email> emails = collection.aggregate("{$project:{sender:1}}")
          .and("{$match:{tags:'read'}}")
          .and("{$limit:10}")
          .as(Email.class);

您可以在这里找到更多示例:

您可以使用诸如find/findOne之类的聚合功能。。。结果将自动解组到Pojo中:

List<Email> emails = collection.aggregate("{$project:{sender:1}}")
          .and("{$match:{tags:'read'}}")
          .and("{$limit:10}")
          .as(Email.class);

你可以在这里找到更多的例子:

我刚刚看到这个问题,但我希望它能帮助其他人。 可以创建如下所示的内部类:

private static class AggregateResult {
        String _id;
        int time;
    }
并按如下方式调用聚合函数:

{
        "result" : [
                {
                        "_id" : "luke",
                        "times" : 8
                },
                {
                        "_id" : "albert",
                        "times" : 4
                },
                {
                        "_id" : "matt",
                        "times" : 4
                }
        ],
        "ok" : 1
}
List<AggregateResult> res =  gamesCollection.aggregate(
                "{ ... }"
                ).as(AggregateResult.class);

然后您可以在res列表中迭代结果。

我现在刚刚看到这个问题,但我希望它可以帮助其他人。 可以创建如下所示的内部类:

private static class AggregateResult {
        String _id;
        int time;
    }
并按如下方式调用聚合函数:

{
        "result" : [
                {
                        "_id" : "luke",
                        "times" : 8
                },
                {
                        "_id" : "albert",
                        "times" : 4
                },
                {
                        "_id" : "matt",
                        "times" : 4
                }
        ],
        "ok" : 1
}
List<AggregateResult> res =  gamesCollection.aggregate(
                "{ ... }"
                ).as(AggregateResult.class);

然后,您可以在res列表中迭代结果。

您能否共享聚合类的代码和完整集合。聚合。。你在质疑Jongo?谢谢。我会找一个又快又脏的解决方案,等我有时间的时候我会回去修改你的建议。如你所愿,非常感谢你的帮助。在我看来,有了您的完整代码,我们可以在几分钟内解决这个问题。您可以共享聚合类和完整集合的代码吗。聚合。。你在质疑Jongo?谢谢。我会找一个又快又脏的解决方案,等我有时间的时候我会回去修改你的建议。如你所愿,非常感谢你的帮助。在我看来,有了完整的代码,我们可以在几分钟内解决这个问题。