jq é fundamentalmente um filtro, então .docs[0]
limita os dados que o restante do script tem disponível para o que selecionou. No final do programa, o que está no fluxo é gerado. Assim, o + { ... }
só vê o objeto e sua saída é usada como a saída de todo o programa.
Se, em vez disso, você quiser modificar um dos elementos selecionados, use +=
, que é um apelido para o operador de atribuição de atualização |= . + ...
:
jq '.docs[1] += { "value": "value" }' < ...
Você poderia escrever de forma equivalente o desugared
jq '.docs[1] |= . + { "value": "value" }' < ...
Em ambos os casos, ele substitui o valor atual (o que .
foi quando você iniciou) com o resultado da aplicação da alteração que você descreveu para o (s) elemento (s) selecionado (s). Esse novo valor continua no pipeline, neste caso imediatamente para o estágio de saída.