2012-07-09 139 views
5

我使用CasbahSalat创建自己的MongoDB的DAO和正在实施GETALL方法是这样的:如何检索包含ID的Mongodb集合中的所有对象?

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

我想知道的是:

  1. 有没有更好的办法检索所有对象?
  2. 当我迭代对象时,找不到对象的_id。它被排除了吗?我如何将它包含在列表中?

回答

5

1°/ ModelCompanion特征提供def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty)方法。您必须为您的数据库的每个集合都进行专门的请求。

如果你遍历返回的对象,它可以更好地与由dao.find返回而不是做两次迭代迭代(一个与toListIterator特质然后又在你List[T])。

2°/萨拉特将_id键映射到您的班级ID字段。如果您使用id: ObjectId字段定义类。该字段使用mongo _id键映射。 您可以使用@Key注释改变这种行为,因为在Salat documentation

1

指出我实现这样的:

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

这将提取所有的ID,但由于各种各样的东西,你可能会做,可能不是所有情况下的最佳解决方案。现在,我正在构建一个包含5条记录数据的小系统,并用它来帮助理解MongoDB的工作方式。

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

相关问题