Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

262
Visualizações
MongoDB y LINQ: cláusula "NO EN"

Tengo dos colecciones, una es una lista de nombres de imágenes, la segunda es un subconjunto de esa lista. Cuando se ha completado una tarea, su nombre se inserta en la segunda colección.

Necesito recuperar un conjunto de nombres de imágenes aún no completados de la primera colección. He logrado esto con éxito con:

 var processedNames = processed.AsQueryable().Select(x => x.ImageName).ToArray(); foreach (var result in results.Where(x => !processedNames.Contains(x.ImageName))

Sin embargo, esto trae una gran lista de cadenas de la base de datos y luego la envía de regreso a la base de datos en un solo documento, que además de ser ineficiente eventualmente se romperá.

Así que traté de reescribirlo para que todo se realice del lado del servidor con:

 var results = from x in captures join complete in processed.AsQueryable() on x.ImageName equals complete.ImageName into completed where !completed.Any() select x;

Esto falla con:

System.NotSupportedException: '$proyecto o $grupo no admite {documento}.'

También intenté usar la API que no es de LINQ:

 var xs = capturesCollection.Aggregate() .Lookup("Processed", "ImageName", "ImageName", @as: "CompletedCaptures") .Match(x => x["CompletedCaptures"] == null) .ToList();

Esto falla con:

 MongoDB.Bson.BsonSerializationException: 'C# null values of type 'BsonValue' cannot be serialized using a serializer of type 'BsonValueSerializer'.'

¿Cómo puedo lograr esta consulta completamente del lado del servidor con el controlador C#? Una solución LINQ pura es preferible para la portabilidad.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Descubrí cómo hacerlo con la API Aggregate :

 var results = capturesCollection.Aggregate() .As<CaptureWithCompletions>() .Lookup(processed, x => x.ImageName, x => x.ImageName, @as:(CaptureWithCompletions x) => x.CompletedCaptures) .Match(x => !x.CompletedCaptures.Any()) //.Limit(2) .ToList();
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda