如何检索Mongodb集合中的所有对象,包括ids?

时间:2012-07-09 07:23:35

标签: scala mongodb casbah salat

我正在使用CasbahSalat来创建我自己的Mongodb dao并正在实现这样的getAll方法:

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

我想知道的是:

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

2 个答案:

答案 0 :(得分:5)

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

如果迭代返回的对象,最好使用SalatMongoCursor[T]返回的dao.find进行迭代,而不是进行两次迭代(一次使用来自{{1}的toList然后你的Iterator上有另一个特征。

2°/ Salat将_id键与您的班级ID字段进行映射。如果您定义具有List[T]字段的类。该字段使用mongo _id键进行映射。 您可以使用Salat documentation

中指出的id: ObjectId注释更改此行为

答案 1 :(得分:1)

我实现了类似的东西:

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

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

如果这是一个包含1,000,000个条目的生产数据库,则此(或任何getAll查询)将是愚蠢的。不要这样做,而是考虑尝试编写一个追求真实结果的目标查询。