Cada vaga tem um external_id único, mas alguns aparecem várias vezes na mesma resposta da API.
Meu objetivo:
Permitir exatamente um item de cada vaga
Filtrar duplicatas dentro do mesmo payload
Sem uma verificação no Supabase, porque o banco de dados ainda está vazio
Estou usando um nó Code em modo “Run Once for All Items” para detectar duplicatas.
Qual é a mensagem de erro (se houver)?
Por favor, compartilhe seu workflow
(Selecione os nós na sua tela e use os atalhos de teclado CMD+C/CTRL+C e CMD+V/CTRL+V para copiar e colar o workflow.)
@haajj3012 Nó de código no modo “Executar Uma Vez para Todos os Itens”:
const seen = new Set();
return $input.all().filter(item => {
const id = item.json.external_id;
if (seen.has(id)) return false;
seen.add(id);
return true;
});
emite um item por external_id único, descarta o resto. se você quiser manter um ESPECÍFICO (mais recente por data, versão mais alta, etc) em vez de “primeiro visto”, é só avisar.
Oi @haajj3012, @achamm’s code funciona perfeitamente. só adicionando uma
opção sem código caso você prefira manter as coisas visuais no
fluxo de trabalho:
n8n tem um nó Remove Duplicates integrado que faz exatamente
isso sem escrever nenhum javascript. configuração:
coloque um nó Remove Duplicates após sua chamada de api
operação: “Remove Items With Same Field Value”
campo de comparação: external_id
iso vai filtrar o array para itens únicos em um nó, mais fácil
de identificar na tela depois quando você estiver debugando.
alguns pequenos casos extremos que vale a pena tratar em qualquer
abordagem que você escolher:
se external_id faltar ou for null em alguns itens, tanto o
código quanto o nó vão tratar todos os nulls como duplicatas
um do outro. normalmente fica bem, mas se você quer manter os
nulls, adicione um filtro antes do passo de remoção de
duplicatas para separá-los.
se a api retornar o id como um número em alguns itens e uma
string em outros, ambas as abordagens vão tratar "123" e 123 como diferentes. um simples String(item.json.external_id)
no código (ou um nó Set para normalizar o tipo) resolve isso.
já que você mencionou que supabase vem depois — quando você
adicioná-lo, o padrão mais limpo é fazer dedup dentro do payload
primeiro (o que você está fazendo agora), aí fazer dedup contra
supabase como segundo passo. mantém a lógica limpa e fácil de
testar cada camada independentemente.
Ótimas respostas de @achamm e @Dharmendra_Kumar – o padrão Set + filter no nó Code é sólido, e a opção visual com Remove Duplicates é exatamente o que se encaixa perfeitamente nesse caso de uso.
Como o n8n já oferece muito bem esse cenário nativamente, eu pessoalmente evitaria um nó Code aqui e confiaria totalmente no nó integrado. Isso mantém o workflow mais fácil de ler e geralmente mais estável a longo prazo.
Para seu objetivo específico (“exatamente um item por external_id dentro do mesmo payload, banco de dados ainda vazio”), você pode configurar Remove Duplicates assim:
Adicione um nó Remove Duplicates logo após seu nó API.
Configure Operation para Remove Items Repeated Within Current Input.
Configure Compare → Selected Fields e escolha external_id como o campo.
Isso vai manter apenas o primeiro item de cada external_id na execução atual e descartar todos os duplicatas seguintes – exatamente o que você descreveu, sem código extra ou verificações de banco de dados.
Mais tarde, quando você começar a usar Supabase e também quiser pular vagas que já processou em execuções anteriores, você pode encadear um segundo nó Remove Duplicates em modo Remove Items Processed in Previous Executions. Assim você consegue um padrão limpo “dedupe dentro do payload → dedupe contra histórico”, tudo com nós nativos.