In `yq`

expressions are made up of operators. Operators have 0-2 arguments and run against the current 'matching' nodes in the expression tree.

Lets look at a couple of examples.

The `length`

operator take no arguments, and will simply return the length of *each* matching node. So if there were 2 nodes, one string and one array, length will update the 'matching' nodes context to be two new numeric scalar nodes representing the lengths of the orignal 'matching' nodes.

The `=`

operator takes two arguments, a `lhs`

expression and `rhs`

expression. It runs the 'matching' nodes context against the `lhs`

expression to find the nodes to update, lets call it `lhsNodes`

, and then runs the matching nodes against the `rhs`

to find the new values, lets call that `rhsNodes`

. It updates the `lhsNodes`

values with the `rhsNodes`

values and *returns the original matching nodes*. This is important, where length changed the matching nodes to be new nodes with the length values, `=`

returns the original matching nodes, albeit with some of the nodes values updated. So `.a = 3`

will still return the parent matching node, but with the matching child updated.

Please see the individual operator docs for more information and examples.