Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

156
Vistas
Cómo obtener valor de KeyValuePair anidado de IMongoCollection

La estructura de filas en MongoDB es la siguiente:

 { "_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 } ] }

Me gustaría obtener los valores de SocialData , grupo por PublishedDate . Mi código en este momento se ve así:

 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();

Recibo la excepción de que FirstOrDefault() no es compatible, entonces, ¿cómo debo recuperar estos datos?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

no creo, MongoDrive podría traducirlo a consulta. Si SocialMedia no es muy alto, obtendría el diccionario completo y lo filtraría en el lado del cliente:

 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.First().SocialData }) .Project( r => new { SocialMedia = r.RetweetsValue, Day = r.Key.groupedDay, Month = r.Key.groupedMonth, Year = r.Key.groupedYear, }) .ToList() .Select( r => new ChartSummary { SocialMedia = r.SocialMedia.FirstOrDefault(x=>x.Key=="Retweets").Value, Day = r.Day, Month = r.Month, Year = r.Year });
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda