私が抱えている状況は、オブジェクト階層の1レベル以上深いフィールドの文字列を使用してMongoDBにクエリを実行していることです。このクエリは文字列である必要があります。たとえば、Groovyで次のようなものをクエリしています。
def queryField = 'a.b.c' //this is variable and can be different every time
def result = mongodb.collection.findOne([queryField:5])
結果として、ネストされたフィールドの値を見つけたいという問題は発生しません。GPathを使用すると、1レベル深くなり、これを行うことでの価値を得ることができます。
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では機能しません。ここにログに記録されたバグがありますが、ドットを分割してオブジェクトトラバーサルを構築することで文字列を解析するよりも少しクリーンな、このシナリオで使用するより良い回避策があるかどうか疑問に思いました。「abc」は可変であり、実行時には不明であることに注意してください(たとえば、「abd」である可能性があります)。