Ситуация, с которой я столкнулся, заключается в том, что я запрашиваю MongoDB со строкой для поля, которое находится на глубине более одного уровня в иерархии объектов. Этот запрос должен быть строкой. Так, например, я запрашиваю что-то вроде этого в Groovy:
def queryField = 'a.b.c' //this is variable and can be different every time
def result = mongodb.collection.findOne([queryField:5])
Не возникает проблема, что в результате я хочу найти значение вложенного поля. С помощью GPath я мог бы пройти один уровень и получить значение a, выполнив это
def aObj = result."a" //or result["a"]
Однако я хочу пойти глубже, сделав что-то вроде этого:
def queryField = "a.b.c" //this can change every time and is not always 'a.b.c'
def cObj = result[queryField] //since field is variable, can't just assume result.a.b.c
Это не работает в Groovy прямо сейчас. Здесь есть ошибка, записанная здесь , но мне было интересно, есть ли лучший способ использовать этот сценарий, который немного чище, чем я, разбирая строку, разбивая ее на точку, а затем создавая обход объекта , Обратите внимание, что «a.b.c» является переменной и неизвестной во время выполнения (например, это может быть «a.b.d»).