0

我在 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”,点赞数之和,数组中的所有来源,数组中的所有情绪。我想要所有与 feedData.from.id 相关的数据,格式如下,使用 spring mongo。

{

“feedDatafromid”:“416992615172913”,

“名称”:“阿什什库马尔”,

"sourceName" : ["MyPage","YourPage"],

“频道”:“脸书”,

“喜欢计数”:3,

“情绪”:[“中性”,“积极”]

}

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

4

1 回答 1

0

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

聚合 agg = newAggregation(match(criteria),group(userIdKey).sum("likeCount").as("likeCount").sum("commentCount").as("commentCount").addToSet("sourceName")。 as("sourceName").addToSet("sourceId").as("sourceId").addToSet("sentiment").as("sentiment").addToSet("channelId").as("channelId").addToSet ("channelName").as("channelName").addToSet(userIdKey).as("postUserId").addToSet(userNameKey).as("postUserName"));

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

if(null!=results) 列出 feedList = results.getMappedResults();

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

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

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

feedDbBean.userId = (userId)

feedDbBean.userName = (用户名)

feedDbBean.likeCount =(按 userId 的喜欢计数组的总和)

feedDbBean.commentCount =(用户 ID 分组的评论计数总和)

feedDbBean.sourceName =(此处显示的所有唯一源名称组按用户 ID 以逗号分隔)

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

于 2015-09-30T11:34:12.920 回答