我正在使用Casbah和Salat创建我自己的 Mongodb dao,并正在实现一个 getAll 方法,如下所示:
val dao: SalatDAO[T, ObjectId]
def getAll(): List[T] = dao.find(ref = MongoDBObject()).toList
我想知道的是:
- 有没有更好的方法来检索所有对象?
- 当我遍历对象时,我找不到对象的_id。是否排除在外?如何将其包含在列表中?
1°/ ModelCompanion
trait 提供了一种def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty)
方法。您必须为您的数据库拥有的每个集合做一个专门的请求。
如果您迭代返回的对象,最好使用返回的对象进行迭代,SalatMongoCursor[T]
而dao.find
不是进行两次迭代(一次使用toList
fromIterator
特征,然后另一次在 your 上List[T]
)。
2°/ Salat 将 _id 键映射到您的类 id 字段。如果您定义一个带有id: ObjectId
字段的类。该字段使用 mongo _id 键映射。您可以使用Salat 文档@Key
中指出的注释来更改此行为
我实现了类似的东西:
MyDAO.ids(MongoDBObject("_id" -> MongoDBObject("$exists" -> true)))
这会获取所有 id,但考虑到您可能正在做的事情的范围很广,可能不是所有情况的最佳解决方案。现在,我正在构建一个包含 5 条数据记录的小型系统,并使用它来帮助理解 MongoDB 的工作原理。
如果这是一个包含 1,000,000 个条目的生产数据库,那么这个(或任何 getAll 查询)将是愚蠢的。与其这样做,不如考虑尝试编写一个有针对性的查询,以追求您寻求的真实结果。