如何将mongodb的结果分组为给定格式的后续数据

时间:2015-09-24 13:03:54

标签: java spring-mongodb

我在mongodb中有以下格式的数据。我在下面给出了两行名为' feed'的mongodb数据。

{

"_id" : ObjectId("55e80a725ae35bbfc6dce074"),
"sourceId" : "12345",
"sourceName" : "MyPage",
"channelId" : "67890",
"channelName" : "Facebook",
"likeCount" : 1,
"feedData" : {
    "from" : {
        "id" : "416992615172913",
        "name" : "Ashish Kumar"
    },
    "created_time" : "2015-08-04T09:54:39+0000",
},
"sentiment" : "neutral",

}

{

"_id" : ObjectId("55e80a725ae35bbfc6dce074"),
"sourceId" : "23456",
"sourceName" : "YourPage",
"channelId" : "67890",
"channelName" : "Facebook",
"likeCount" : 2,
"feedData" : {
    "from" : {
        "id" : "416992615172913",
        "name" : "Ashish Kumar"
    },
    "created_time" : "2015-08-04T09:54:39+0000",
},
"sentiment" : "positive",

}

我想在字段feedData.from.id上执行groupBy,其中channelName等于' Facebook',类似数量的总和,数组中的所有源,数组中的所有情绪。我希望使用spring mongo以下面给出的格式与feedData.from.id相关联的所有数据。

{

" feedDatafromid" :" 416992615172913",

"名称" :" Ashish Kumar",

" SOURCENAME" :[" MyPage"," YourPage"],

"信道" :" Facebook",

" likeCount" :3,

"情绪" :["中立","肯定"]

}

有人可以帮我在java中编写代码以给定的方式对mongodb的数据进行分组。

1 个答案:

答案 0 :(得分:0)

假设我们有FeedDbBean类来保存聚合结果。

聚合agg = newAggregation(匹配(标准),组(userIdKey).sum(“likeCount”)。as(“likeCount”)。sum(“commentCount”)。as(“commentCount”)。addToSet(“sourceName” “)。如(” SOURCENAME “)。addToSet(” 的SourceID “)。如(” 的SourceID “)。addToSet(” 情绪 “)。如(” 情绪 “)。addToSet(” 的channelID “)。如(” 的channelID” ).addToSet( “CHANNELNAME”)作为( “CHANNELNAME”)addToSet(userIdKey)。如( “postUserId”)addToSet(userNameKey)。如( “postUserName”));。。。

results = mongoTemplate.aggregate(agg,FEED_COLLECTION_NAME,FeedDbBean.class);

如果(NULL!=结果)             列出feedList = results.getMappedResults();

...................

因此,使用给定代码,代表userIdKey的结果将存储在FeedDbBean列表中。

每个FeedDbBean对象都具有以下方式的属性。

feedDbBean.userId =(userId)

feedDbBean.userName =(userName)

feedDbBean.likeCount =(userId类似计数组的总和)

feedDbBean.commentCount =(用户ID的组合评论总数)

feedDbBean.sourceName =(所有唯一的源名称group by userid show here以逗号分隔)

feedDbBean.sentiment =(所有情绪由逗号分组按用户ID分隔)