Структура строки в MongoDB выглядит следующим образом:Как получить значение из вложенного KeyValuePair из IMongoCollection
{
"_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()
не поддерживается, так как я должен получить эти данные?
[Это] (http://stackoverflow.com/questions/31171451/getting-a-single-object-from- mongodb-in-c-sharp) вопрос может помочь. – RandomStranger
Я не думаю, что это возможно, это был аналогичный вопрос: http://stackoverflow.com/questions/41902613/what-is-the-c-sharp-equivalent-of-push-and-root-for -mongodb/41903581 # 41903581 Я бы получил полный словарь и фильтр на стороне клиента. Или представляет собой очень большой словарь SocialMedia? –
@MaksimSimkin зависит от 'ServiceType' SocialData максимально до 5 элементов, поэтому он не огромен и ключи уникальны. –