使用scala和lift,我如何对mongodb集合中的文档进行高效的过滤操作



我在mongodb中有一个User集合,正在使用lift/scala执行User.findAll操作并检索在特定时间段内创建的用户数。我正在利用objectId的getTime方法,但我需要应用一些方法并相乘以获得存储在每个文档中的字符串,将其转换回objectId,并从毫秒转换为秒。这是在最后一小时内为用户创建的代码行:val users=User.findAll.filter{u:User=>(((ObjectId.messetToObjectId(u._id)).getTime)/1000)<=3600)}长度

我需要在数据库中找到一种方法来实现这一点,而不是将所有数据都放入内存,然后用函数进行过滤。在过去,我曾以这样的方式使用queryBuilder来实现同样的目标,但在这种情况下,我没有其他计算方法可以应用于文档中的值:val qry1=QueryBuilder.start("numberOfFriends").geaterThan(0).getvar oneplus:List[User]=User.findAll{qry1}

我也知道这样的方法:User.findAll(("name"->"joe")~("age"->27))

我知道findall可以接受很多其他东西,比如一个名为sort的DBObject。但我不熟悉如何使用它。

如果有人知道如何操作这些方法中的一种,或者能够提出另一种方法,我们将不胜感激。

谢谢,-Ronnie

我建议你看看Foursquare的Rogue。这是查询MongoDB的一种非常好的方式,而且是类型安全的!

以下是您的查询结果:

// usage
val d1 = new DateTime(2010, 5, 1, 0, 0, 0, 0, DateTimeZone.UTC)
val users = User where (_._id after d1) count()

最新更新