【发布时间】:2012-02-29 02:30:07
【问题描述】:
我遇到的情况是,我正在使用字符串查询 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 中不起作用。记录了一个错误here,但我想知道是否有更好的解决方法可用于这种情况,它比我通过在点上拆分然后构建对象遍历来解析字符串更干净。请注意,“a.b.c”在运行时是可变的并且是未知的(例如,它可能是“a.b.d”)。
【问题讨论】:
-
我的回答的后半部分有帮助吗? stackoverflow.com/a/6364388/6509
-
感谢@tim_yates,这正是我想要的,但无法从我对 SO 的查询中找到它。您推荐的两个(评估与字符串解析)中的哪一个。两者都在进行字符串解析,但我认为 eval 可能会慢一点。有什么想法吗?
-
我会选择注入方法,但如果你有带有点的属性,它的弹性会降低,例如:
a.'some.var'.c
标签: grails mongodb groovy gpath