Полезно иметь небольшой примерный график. Вот тот, который соответствует вашему вопросу.
g.addV('A').as('a').
addV('B').as('b').
addV('C').as('c').
addV('D').as('d').
addE('knows').from('a').to('b').
addE('knows').from('a').to('c').
addE('knows').from('d').to('c')
Используя этот график, запрос на поиск друзей, уникальных для А, можно записать как
gremlin> g.V().hasLabel('A').
out('knows').
filter(__.in('knows').count().is(1)).
path().
by(label)
==>[A,B]
Отредактировано на основе обновленного вопроса.
ОК, поэтому, учитывая дополнительные критерии, я считаю, что это дает вам то, что вам нужно
gremlin> g.V().hasLabel('A','B').
......1> out().
......2> groupCount().
......3> unfold().
......4> filter(select(values).is(2)).
......5> select(keys).
......6> where(__.in('knows').count().is(2)).
......7> label()
==>C