我们正在使用mongodb,并使用scala重写我们的堆栈部分。我想知道我是否应该坚持使用mophia,或者使用scala mongodb库,例如子集。
问题是我从子集中获得了什么?例如使用mophia我不必手动定义mongodb字段名称,就像我必须在子集中一样...
子集真的值得使用吗?
答案 0 :(得分:3)
答案 1 :(得分:0)
使用Scala,您应该考虑使用Casbah,这是一个基于Java驱动程序构建的MongoDB官方支持的接口。
Casbah的方法旨在在MongoDB之上添加流畅的Scala友好语法,并处理常见类型的转换。如果您尝试将Scala List或Seq保存到MongoDB,我们会自动将其转换为Java驱动程序可以序列化的类型。如果您读取Java类型,我们会在它到达您的代码之前将其转换为类似的Scala类型。所有这些都是为了让您专注于使用Scala习语编写最好的Scala代码。为了向您提供您期望从Scala获得的功能和隐式转换工具,以及MongoDB的强大功能和灵活性,我们付出了很多努力。
Casbah为GridFS,Map / Reduce和核心Mongo API提供了改进的接口。它还提供了一种流畅的查询语法,可以模拟内部DSL,并允许您编写类似于您在JS Shell中编写的代码。还支持为常见数据类型轻松添加新的序列化/反序列化机制。
答案 2 :(得分:0)
除了ORM-Mapper / Client-Libraries之外,我建议你试试Rouge。它将为您提供一个很好的Mongo Query DSL。 Rogue 1.X只支持Lift-MongoDB,但2.x版本(将在不久的将来发布)将适用于更多的MongoDB库。
示例查询将是(带有编译时类型检查的纯Scala代码):
Venue where (_.mayor eqs 1234) and (_.categories contains "Thai") fetch(10)
查询Venue集合中的10个条目,其中1234是市长,泰语是其类别之一。
答案 3 :(得分:0)
我是子集的作者。我会说“Subset”并不是一种真正的ORM库。它没有处理数据库和集合的方法,而是将它留给Java / Scala驱动程序。但它更侧重于MongoDB文档的转换。该转换核心非常通用,不仅适用于字段的读/写,而且适用于需要执行的应用程序。文档迁移也是如此。查询/更新构建器子集提供是建立在这个“核心”之上。
那就是说,如果你需要ORM,确实有更简单的选择。我从来没有打算让Subset与真正的ORM库竞争,我已经填补了我在项目中遇到的空白。