Scala Casbah - 将命令行字符串过滤器转换为DSL过滤器

时间:2014-05-05 04:46:19

标签: mongodb scala

我有一个流式传输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文档中探讨,但我找不到一个简单的方法来做到这一点。

提前致谢。

1 个答案:

答案 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,请确保以正确的方式解决问题;)并且所有常见的警告都适用 - 不要相信来自未知来源的输入。