我使用Casbah和Salat创建自己的MongoDB的DAO和正在实施GETALL方法是这样的:如何检索包含ID的Mongodb集合中的所有对象?
val dao: SalatDAO[T, ObjectId]
def getAll(): List[T] = dao.find(ref = MongoDBObject()).toList
我想知道的是:
- 有没有更好的办法检索所有对象?
- 当我迭代对象时,找不到对象的_id。它被排除了吗?我如何将它包含在列表中?
我使用Casbah和Salat创建自己的MongoDB的DAO和正在实施GETALL方法是这样的:如何检索包含ID的Mongodb集合中的所有对象?
val dao: SalatDAO[T, ObjectId]
def getAll(): List[T] = dao.find(ref = MongoDBObject()).toList
我想知道的是:
1°/ ModelCompanion
特征提供def findAll(): SalatMongoCursor[ObjectType] = dao.find(MongoDBObject.empty)
方法。您必须为您的数据库的每个集合都进行专门的请求。
如果你遍历返回的对象,它可以更好地与由dao.find
返回而不是做两次迭代迭代(一个与toList
从Iterator
特质然后又在你List[T]
)。
2°/萨拉特将_id键映射到您的班级ID字段。如果您使用id: ObjectId
字段定义类。该字段使用mongo _id键映射。 您可以使用@Key
注释改变这种行为,因为在Salat documentation
指出我实现这样的:
MyDAO.ids(MongoDBObject("_id" -> MongoDBObject("$exists" -> true)))
这将提取所有的ID,但由于各种各样的东西,你可能会做,可能不是所有情况下的最佳解决方案。现在,我正在构建一个包含5条记录数据的小系统,并用它来帮助理解MongoDB的工作方式。
如果这是一个包含1,000,000个条目的生产数据库,那么这个(或任何getAll查询)将是愚蠢的。不要这样做,可以考虑编写一个有针对性的查询,追踪您寻求的真实结果。