首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Jongo汇总结果

用Jongo汇总结果
EN

Stack Overflow用户
提问于 2013-03-23 15:40:00
回答 2查看 3.3K关注 0票数 2

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

代码语言:javascript
复制
{
        "result" : [
                {
                        "_id" : "luke",
                        "times" : 8
                },
                {
                        "_id" : "albert",
                        "times" : 4
                },
                {
                        "_id" : "matt",
                        "times" : 4
                }
        ],
        "ok" : 1
}

从上面的结果可以看出,查询在mongoDB shell中工作,但是在使用Jongo获得结果时遇到了问题:

代码语言:javascript
复制
        Aggregationoutput = 
                gamesCollection.aggregate(
                "{ ... }"
                ).as(Aggregation.class);
        output.results().iterator().hasNext();

主要的问题似乎是Jongo不允许我使用AggregationOutput?他想代替Aggregation ..。但是找不到任何关于如何使用它的例子

编辑:我有点沮丧,因为我不能让Jongo使用聚合。我必须按照DBObjects驱动程序中指定的那样用MongoDB编写查询,但是代码看起来真的很难看。

EDIT2:仅仅是为了完成信息,这是我与Jongo一起使用的原始聚合,无法将其解锁到ResultObject

代码语言:javascript
复制
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;
}

}

EN

回答 2

Stack Overflow用户

发布于 2013-03-24 15:15:06

您可以使用聚合特性,如find/findOne..。结果自动解组为Pojo:

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

您可以在这里找到更多的示例:https://github.com/bguerout/jongo/blob/master/src/test/java/org/jongo/AggregateTest.java

票数 4
EN

Stack Overflow用户

发布于 2014-08-21 16:34:10

我刚才看到了这个问题,但我希望它能帮助别人。您可以创建这样的内部类:

代码语言:javascript
复制
private static class AggregateResult {
        String _id;
        int time;
    }

并按如下方式调用聚合函数:

代码语言:javascript
复制
List<AggregateResult> res =  gamesCollection.aggregate(
                "{ ... }"
                ).as(AggregateResult.class);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15588641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档