我遇到的情況是,我正在使用字符串查詢MongoDB,該字符串是對象層次結構中多於一個深度的字段。這個查詢必須是一個字符串。因此,例如,我在Groovy查詢是這樣的:使用GPath深入遍歷字符串中帶點的Groovy對象的方法
def queryField = 'a.b.c' //this is variable and can be different every time
def result = mongodb.collection.findOne([queryField:5])
的問題沒有出現在結果我想找到嵌套字段的值。隨着GPATH我能去一個層次深,獲得的價值做這個
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工作現在。有一個記錄here的錯誤,但我想知道是否有更好的解決方案用於這種場景,這比我通過分割點然後構建對象遍歷來解析字符串更簡潔。請注意,「a.b.c」在運行時是可變的和未知的(例如,它可能是「a.b.d」)。
我的答案的後半部分在這裏有幫助嗎? http://stackoverflow.com/a/6364388/6509 – 2012-02-07 19:07:42
謝謝@tim_yates,這正是我正在尋找,但無法從我的查詢找到它。你提出的兩個(eval與字符串解析),你推薦。兩者都在做字符串解析,但我認爲可能會慢一點。有什麼想法嗎? – Scott 2012-02-07 19:32:57
我會去注入方法,雖然它的彈性較差,如果你有他們的點像屬性:'a.'some.var'.c' – 2012-02-07 20:12:55