@Override
    public BsonValue visit(Call call) {
      Operator op = call.operator();
      if (op.arity() == Operator.Arity.BINARY) {
        return visitBinary(call, call.arguments().get(0), call.arguments().get(1));
      }

      if (op.arity() == Operator.Arity.UNARY) {
        return visitUnary(call, call.arguments().get(0));
      }


      throw new UnsupportedOperationException("Don't know how to handle " + call);
    }
Visitor used when special {@code $expr} needs to be generated like {@code field1 == field2}
in mongo it would look like:

<pre>
  {@code
    $expr: {
    $eq: [
      "$field1",
      "$field2"
    ]
  }
  }
</pre>
@see <a href="https://docs.mongodb.com/manual/reference/operator/query/expr/">$expr</a>
criteria/mongo/src/org/immutables/criteria/mongo/FindVisitor.java