Update without insert

Yup. https://dgraph.io/docs/mutations/conditional-upsert/#example-of-conditional-upsert

like:

upsert {
  query {
    U as var1(func: uid(0x9c49)) @filter(has(dgraph.type)) { # or @cascade. Why? Look post below.
      uid
      dgraph.type
      expand(_all_)
    }
  }
  mutation @if(eq(len(U), 1)) {
    set {
       uid(U) <elementName> "Test" .
    }
  }
}

You can get resp things and check if operation was done or not.