我在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的数据进行分组。
答案 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分隔)