【发布时间】:2012-08-16 14:57:07
【问题描述】:
Subset 看起来像一个有趣的瘦 MongoDB 包装器。
在给出的示例之一中,有推文和用户。但是,User 是Tweet 的子文档。在经典 SQL 中,这将被规范化为两个单独的表,其外键从 Tweet 到 User。在 MongoDB 中,这不需要DBRef,存储用户的ObjectId 就足够了。
在 Subset 和 Salat 中,这将导致这些案例类:
case class Tweet(_id: ObjectId, content: String, userId: ObjectId)
case class User(_id: ObjectId, name: String)
因此无法保证 Tweet 中的 ObjectId 确实解析为 User(使其类型安全性降低)。我还必须为每个引用 User 的类编写相同的查询(或将其移动到某些特征)。
所以我想要实现的是在代码中拥有case class Tweet(_id: ObjectId, content: String, userId: User),在数据库中拥有ObjectId。这可能吗?如果可以,怎么做?有什么好的替代品?
【问题讨论】:
-
在 Salat 中,他们有子集合,这可以解决问题,但不能完全解决。
-
如果你想要关系,你不应该使用 RDBMS 吗?在这种情况下,我会使用子文档...
-
当然,您将无法在引用对象上设置查询条件(相对于 SQL“join”)。但是您仍然可能希望将实体存储在其自己的集合中并从其他对象中引用它。
标签: scala mongodb subset salat