首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mongo-java实现定义“$add :["$count”,“$count1”]“聚合?

如何使用mongo-java实现定义“$add :["$count”,“$count1”]“聚合?
EN

Stack Overflow用户
提问于 2013-06-27 13:17:37
回答 2查看 1.6K关注 0票数 0

下面是示例文档结构。

代码语言:javascript
复制
db.volume_statistics.insert({ "client": "SER",
                              "message": "Sample_v02RQ",
                              "GDS": "SABRE",
                              "daily": 240000, 
                              "hourly": {"0": 1000, "1": 100, "2": 454, "3":3434, "4":3434, "5":343, ... , ”23”:454 },
                              "date":ISODate("2013-06-23T04:00:00Z") });

我正在尝试编写一个查询,按照下面的输出格式按8小时{所有8小时的总和}和月份对每小时列的信息进行分组。

代码语言:javascript
复制
{ "Month" : 5 , "01-08" : 26970, "09-17" : 45970}
{ "Month" : 6 , "01-08" : 269712, "09-17" : 56970}

输出定义了6月{6}月,01-08小时内收到269712个请求,09-17小时内收到56970个请求。

我已经编写了以下本机命令和Java代码来执行此操作。

本机命令::

代码语言:javascript
复制
db.volume_statistics.aggregate( { $match: { date: { $gt: ISODate("2011-01-01T00:00:00Z") } } },
                                { $group : { _id: { month: { $month: "$date" } }, count: { $sum: "$hourly.0" }, count1: { $sum: "$hourly.1" } } },
                                { $project: { _id: 1, count : 1 , count1 : 1 , "01-08" :{ $add:["$count", "$count1"]} } } );

Java实现:

代码语言:javascript
复制
DBObject match = new BasicDBObject("$match", new BasicDBObject("date",new BasicDBObject("$gt",fromDate)));

DBObject fields = new BasicDBObject("_id", 1);
            fields.put("hourly_0", 1);
            fields.put("hourly_1", 1);
            fields.put("01-08", new BasicDBObject("$add","$hourly_0"));
DBObject project = new BasicDBObject("$project", fields);

//现在$group操作*

代码语言:javascript
复制
DBObject groupFields = new BasicDBObject("_id", new BasicDBObject("$month","$date"));
groupFields.put("hourly_0", new BasicDBObject("$sum", "$hourly.0"));
groupFields.put("hourly_1", new BasicDBObject("$sum", "$hourly.1"));
DBObject group = new BasicDBObject("$group", groupFields);

*

//运行聚合

代码语言:javascript
复制
AggregationOutput output = table.aggregate(match,group,project);

我几乎已经完成了逻辑,但$add命令的唯一问题。如何使用mongo-java实现定义“$add :"$count”,“$count1”“。我不能在java实现的$add命令中提到多个值。有人能建议我如何完成这项工作吗?

EN

回答 2

Stack Overflow用户

发布于 2013-06-28 00:27:01

在Java语言中使用BasicDBList来表示数组。您的代码将如下所示:

代码语言:javascript
复制
    DBObject fields = new BasicDBObject("_id", 1);
        fields.put("hourly_0", 1);
        fields.put("hourly_1", 1);

        BasicDBList dbList = new BasicDBList();
        dbList.add("$hourly_0");
        dbList.add("$hourly_1");
        fields.put("01-08", new BasicDBObject("$add",dbList));

    DBObject project = new BasicDBObject("$project", fields);
票数 1
EN

Stack Overflow用户

发布于 2013-09-19 02:55:38

如何通过mongo-java实现定义“$add :"$count”,“$count1”“

代码语言:javascript
复制
String [] srt_array = {"$count", "$count1"};
BasicDBObject add_obj = BasicDBObject ("$add", srt_array);

这个不错,除非,you want to supply a numeric value in the query..。

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

https://stackoverflow.com/questions/17335037

复制
相关文章

相似问题

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