5

我正在使用CasbahSalat创建我自己的 Mongodb dao,并正在实现一个 getAll 方法,如下所示:

val dao: SalatDAO[T, ObjectId]    
def getAll(): List[T] = dao.find(ref = MongoDBObject()).toList 

我想知道的是:

  1. 有没有更好的方法来检索所有对象?
  2. 当我遍历对象时,我找不到对象的_id。是否排除在外?如何将其包含在列表中?
4

2 回答 2

5

1°/ ModelCompaniontrait 提供了一种def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty)方法。您必须为您的数据库拥有的每个集合做一个专门的请求。

如果您迭代返回的对象,最好使用返回的对象进行迭代,SalatMongoCursor[T]dao.find不是进行两次迭代(一次使用toListfromIterator特征,然后另一次在 your 上List[T])。

2°/ Salat 将 _id 键映射到您的类 id 字段。如果您定义一个带有id: ObjectId字段的类。该字段使用 mongo _id 键映射。您可以使用Salat 文档@Key中指出的注释来更改此行为

于 2012-07-09T08:59:57.497 回答
1

我实现了类似的东西:

MyDAO.ids(MongoDBObject("_id" -> MongoDBObject("$exists" -> true)))

这会获取所有 id,但考虑到您可能正在做的事情的范围很广,可能不是所有情况的最佳解决方案。现在,我正在构建一个包含 5 条数据记录的小型系统,并使用它来帮助理解 MongoDB 的工作原理。

如果这是一个包含 1,000,000 个条目的生产数据库,那么这个(或任何 getAll 查询)将是愚蠢的。与其这样做,不如考虑尝试编写一个有针对性的查询,以追求您寻求的真实结果。

于 2012-07-25T04:07:51.673 回答