我有一个流式传输mongo文档的应用程序,我想添加一个功能,允许最终用户为传出文档定义自定义过滤器。该应用程序是用Scala编写的,并使用Casbah驱动程序。基本上我想通过整个过滤字符串(IE,“pop”$ gt 1000)并将其转换为collection.find()可以接受的类型。
基本上,我正在寻找这样的东西:
val filter = """pop" $gt 1000""" //This is passed in from the command-line
val cast = ??? (need to convert the string filter into a DSL Object)
collection.find(cast) //cast should have the value "pop" $gt 1000
我一直在网上和Casbah文档中探讨,但我找不到一个简单的方法来做到这一点。
提前致谢。
答案 0 :(得分:0)
目前在Casbah没有办法做到这一点,你必须编写自己的解析器。
我能想到的最近的就是使用Jongo解析mongo shell文档并将它们转换为DBObjects
。
或者,scala 2.11确实添加了JSR-223 Scripting Engine支持,你做了一个邪恶的评估:
import javax.script.ScriptEngineManager
val e = new ScriptEngineManager().getEngineByName("scala")
e.eval(""""pop" $gt 1000""")
如果您使用eval,请确保以正确的方式解决问题;)并且所有常见的警告都适用 - 不要相信来自未知来源的输入。