jq по сути является фильтром, поэтому .docs[0]
ограничивает данные, доступные остальной части скрипта, тем, что он выбрал. В конце программы выводится все, что находится в потоке. Таким образом, + { ... }
видит только один объект, и его вывод используется как вывод всей программы.
Если вместо этого вы хотите изменить один из выбранных вами элементов, используйте +=
, который является псевдонимом для оператора присваивания обновления |= . + ...
:
jq '.docs[1] += { "value": "value" }' < ...
Вы могли бы эквивалентно написать обессахаранный
jq '.docs[1] |= . + { "value": "value" }' < ...
В любом случае он заменяет текущее значение (то, что .
было, когда вы начали) с результатом применения изменения вы описываете элемент(ы), которые вы выбрали. Это новое значение передается по конвейеру, в данном случае сразу на выходной каскад.