通过与ObjectId进行比较查询

时间:2011-10-05 10:08:11

标签: scala mongodb casbah

我有val maxId = new ObjectId(...),我想查询这样的内容:collection.find("_id" $lte maxId)。这是一个编译失败,因为ObjectId不包含适当的特征ValidDateOrNumericType。如何通过比较ID来正确查询对象?

在Mongo shell中,这似乎是可能的:

> db.test.find({"_id": {$lte: ObjectId("4e825d2f84ae30e970bc0f95")}})
{ "_id" : ObjectId("4e82540684ae236af6e72177")}
{ "_id" : ObjectId("4e825baa84aea840b82e0278")}
...
>

使用Java驱动程序也可以:

query.put("_id", new BasicDBObject("$lte", new ObjectId("4e825d2f84ae30e970bc0f95")))

这适用于Casbah吗?

2 个答案:

答案 0 :(得分:0)

您可以将比较'运算符'实现为方法。要使用它,您的ObjectId必须位于比较的左侧。

您可以使用“pimp my library”提供对包含比较的内容的隐式转换。 (见这个问题How does ‘1 * BigInt(1)’ work and how can I do the same?

或者您可以实现提供所需功能的特征。

答案 1 :(得分:0)

由于ObjectId does not convert to ValidDateOrNumericType,因此Casbah无法完成。我最终使用了Java API:

collection.find(new QueryBuilder().put("_id").lessThanEquals(maxId).get())