【发布时间】:2017-01-30 13:00:59
【问题描述】:
MongoDB中的行结构如下:
{
"_id" : ObjectId("588b0fe98dc6911c54a43be6"),
"GrId" : 1,
"GrTitle" : "GrTitle",
"ServiceType" : 1,
"Url" : "https://twitter.com/xxxxxxxxxx",
"PublishedDate" : ISODate("2017-01-27T09:15:08.000Z"),
"ScrappedDate" : ISODate("2017-01-27T09:16:25.097Z"),
"Keyword" : "keyword",
"ItemId" : "123123",
"SearchType" : 2,
"Content" : "content",
"SocialData" : [
{
"k" : "Retweets",
"v" : 0
},
{
"k" : "Favorites",
"v" : 1
}
]
}
我想从SocialData 中获取值,按PublishedDate 分组。我此时的代码如下所示:
var filter = collection.Aggregate()
.Match(r => r.PublishedDate <= to)
.Match(r => r.PublishedDate >= from);
if (serviceType.HasValue)
filter = filter.Match(r => r.ServiceType == serviceType);
if (gameId.HasValue)
filter = filter.Match(r => r.GrId == gameId.Value);
return filter
.Group(
r => new
{
groupedYear = r.PublishedDate.Year,
groupedMonth = r.PublishedDate.Month,
groupedDay = r.PublishedDate.Day,
itemId = r.ItemId,
},
g => new
{
Key = g.Key,
RetweetsValue = g.FirstOrDefault().SocialData.Select(s => new KeyValuePair<string, int>(s.Key, s.Value)).FirstOrDefault(k => k.Key == "Retweets").Value
})
.Project(
r => new ChartSummary
{
SocialMedia = r.RetweetsValue,
Day = r.Key.groupedDay,
Month = r.Key.groupedMonth,
Year = r.Key.groupedYear,
})
.ToList();
我收到不支持FirstOrDefault() 的异常,那么我应该如何检索这些数据?
【问题讨论】:
-
This 问题可能会有所帮助。
-
我不认为这是可能的,这已经是一个类似的问题了:stackoverflow.com/questions/41902613/… 我会在客户端获得整个字典和过滤器。或者社交媒体真的是一本巨大的字典吗?
-
@MaksimSimkin 依赖于
ServiceTypeSocialData 最多可包含 5 个元素,因此它不是很大并且键是唯一的。
标签: c# .net mongodb linq mongodb-.net-driver