Apresentamos o MongoDB Analyzer para .NET
Avalie esse anúncio
Corrija os culpados do código em tempo de compilação!
Como desenvolvedores de C# e .NET, sabemos que, às vezes, pode ser Frustrante trabalhar idiomaticamente com queries e agregações do MongoDB. Sem uma maneira de ver se sua query LINQ ou expressão Builder corresponde à MongoDB Query API (anteriormente conhecida como MQL) durante o desenvolvimento, você anteriormente tinha que esperar por erros de tempo de execução para solucionar problemas com suas queries. Sabemos que tinha que haver uma maneira de trabalhar de forma mais integrada com C# e MongoDB.
É por isso que criamos o MongoDB Analyzer para .NET! Em vez de mapear manualmente a versão idiomática de sua query em C# para a MongoDB Query API, o MongoDB Analyzer pode fazer isso por você e até mesmo fornecer a expressão de API de query gerada diretamente em seu IDE. O MongoDB Analyzer apresenta informações e avisos úteis sobre expressões inválidas no momento da compilação, proporcionando maior visibilidade às causas raiz dos bugs. E quando usado junto com o provedor LINQ3 lançado recentemente ( agora suportado no MongoDB C#/.NET Driver 2.14.0 e superior), você pode compor e entender as queries de uma maneira muito mais gerenciável .
Vamos dar uma olhada em como instalar e usar o novo MongoDB Analyzer como um pacote NuGet. Seguiremos com alguns exemplos de código para que você possa ver por que essa é uma ferramenta obrigatória para o Visual Studio!
Gerente de pacotes
1 Install-Package MongoDB.Analyzer -Version 1.0.0
.NET CLI
1 dotnet add package MongoDB.Analyzer --version 1.0.0
Depois de instalado, ele será adicionado à lista de dependências do seu projeto, em Analisadores:
Após a instalação e a execução do analisador, você encontrará todos os avisos de diagnóstico no painel Lista de erros. Ao começar a inspecionar seu código, você também verá que quaisquer expressões não suportadas serão destacadas.
À medida que você escreve expressões LINQ ou Builders, uma dica de ferramenta de informações pode ser acessada passando o mouse sobre os três pontos cinzas sob sua expressão:
Acessando a dica de ferramenta para uma expressão LINQ
Esta dica de ferramenta exibe o idioma da API de consulta correspondente à expressão que você está escrevendo e atualiza em tempo real! Com a query convertida em suas dicas de ferramentas, você pode confirmar que a query que está sendo gerada (e executada): é a que você espera.
Este é um processo muito mais eficiente de compor e testar queries – concentre-se nas expressões inválidas em vez de perder tempo traduzindo seu código para a API de queries! E, se precisar copiar as queries resultantes geradas, você pode fazer isso diretamente do seu IDE (no painel Lista de erros).
Outro problema comum que o MongoDB Analyzer resolve é detectar expressões não suportadas e queries inválidas no momento da compilação. Você encontrará todos esses problemas listados como avisos:
Expressões não suportadas mostradas como avisos na lista de erros do Visual Studio
Isso é bastante útil, pois nem todas as expressões LINQ são suportadas pelo driver MongoDB C#/.NET. Da mesma forma, as expressões suportadas serão diferentes dependendo da versão do LINQ que você usar.
Agora que sabemos o que o MongoDB Analyzer pode fazer por nós, vamos ver ao vivo!
Estes são alguns exemplos que mostram como as expressões do Builder são analisadas. Como você verá, o MongoDB Analyzer fornece feedback imediato por meio da dica de ferramenta. Passar o mouse sobre seu código mostra o idioma da API de query suportado que corresponde à query/expressão que você está escrevendo.
Definição de filtro do Builder - Filtre filmes por gênero correspondente, pontuação maior ou igual à pontuação mínima e uma correspondência ao termo do Atlas Search do título.
Builder Sort Definition (Definição de classificação do construtor) - Classifique os filmes por pontuação (da menor para a maior) e título (de Z para A).
Expressão de construtor não suportada - Realçada e mostrada como aviso na Lista de erros.
O MongoDB Analyzer usa o provedor LINQ padrão do driver C#/.NET (LINQ2). As expressões que não são compatíveis com LINQ2 , mas são compatíveis com LINQ3 , mostrarão os avisos apropriados, como você verá em um dos exemplos a seguir. Se você quiser alterar o provedor LINQ que o MongoDB Analyzer usa, defina
“DefaultLinqVersion”: “V3”
no arquivomongodb.analyzer.json
.Consulta de filtro LINQ - pipeline de agregação.
Query LINQ - Obter estatísticas de gênero de filme; usa o pipeline de agregação para agrupar e selecionar um objeto dinâmico.
Expressão LINQ não compatível - Método GetHashCode() não compatível.
Expressão LINQ não suportada - O método referenciando um parâmetro lambda não é suportado.
LINQ2 não compatível, mas expressão LINQ3 compatível - Trim() não é compatível em LINQ2, mas é compatível em LINQ3.
Se você prefere não ver esses avisos "unsupported in LINQ2, but supported in LINQ3 ", agora também é um bom momento para atualizar para o driver mais recente do MongoDB C#/.NET (2.14.1) que tem LINQ3 apoio! Enquanto a transição completa do LINQ2 para o LINQ3 continua, você pode configurar explicitamente seu MongoClient para usar o novo provedor LINQ da seguinte forma:
1 var connectionString = "mongodb://localhost"; 2 var clientSettings = MongoClientSettings.FromConnectionString(connectionString); 3 clientSettings.LinqProvider = LinqProvider.V3; 4 var client = new MongoClient(clientSettings);
O MongoDB Analyzer também pode ser usado a partir da CLI, o que significa que a integração dessa ferramenta de análise estática em sua integração contínua e pipelines de implantação contínua é perfeita! Por exemplo, executar
dotnet build
na linha de comando enviará avisos do MongoDB Analyzer para o terminal:A execução do comando dotnet build gera avisos do MongoDB Analyzer
Adicionar isso como uma etapa em seu pipeline de build pode ser uma verificação de portão valiosa para seu build. Você evitará uma possível dores de cabeça e detectará expressões não suportadas e queries inválidas muito mais cedo.
Outra ideia: Produza umarquivoSARIF(Static Analysis Results Interchange Format) e use-o para gerar planos de explicação para todas as suas consultas. O SARIF é um formato padrão baseado em JSON para a saída de ferramentas de análise estática, tornando um arquivo SARIF o local ideal para obter as consultas compatíveis geradas pelo MongoDB Analyzer.
Para gerar um arquivo SARIF para seu projeto, você precisará adicionar a opção
ErrorLog
ao seu arquivo.csproj
. Você poderá encontrá-lo na raiz do seu projeto (a menos que tenha especificado de outra forma) da próxima vez que criar seu projeto.Com esse arquivo, você pode carregá-lo por meio de um scriptmongosh, processar o arquivo para localizar e "clean " as expressões encontradas da API de query do MongoDB e gerar planos de explicação para a lista de queries. O que você pode fazer com isso? Um ótimo exemplo seria gerar um aviso de compilação (ou falhar completamente na compilação) se você detectar algum índice ausente! Adicionando etapas como essas à sua compilação e usando as informações dos planos de explicação, você pode evitar que possíveis problemas de desempenho cheguem à produção.
Com o lançamento do MongoDB Analyzer para .NET, queremos acelerar seu ciclo de desenvolvimento e aumentar sua produtividade de três maneiras: 1) facilitando o mapeamento de suas queries idiomáticas para a API de query do MongoDB, 2) ajudá-lo a identificar expressões não suportadas e queries inválidas mais rapidamente (no tempo de compilação) e 3) simplificar seu processo de desenvolvimento ao permitir a análise estática para suas queries do MongoDB em seus pipelines de CI/CD!
Estamos muito ansiosos para ver as comunidades .NET e C# usando essa ferramenta e ainda mais ansiosos para ouvir seus comentários. O MongoDB Analyzer está pronto para ser instalado como um pacote NuGet e pode ser adicionado a qualquer projeto existente que use o driver MongoDB .NET. Queremos continuar melhorando essa ferramenta e isso só pode ser feito com a sua ajuda. Se você encontrar algum problema, estiver faltando uma funcionalidade crítica ou tiver um caso extremo que o MongoDB Analyzer não atenda, informe-nos! Você também pode publicar em nossos fóruns da comunidade.
Recursos adicionais