0

我有val maxId = new ObjectId(...)并且我想查询这样的内容:collection.find("_id" $lte maxId). 这是编译失败,因为ObjectId不包含适当的 trait 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可行吗?

4

2 回答 2

0

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

您可以使用“pimp my library”提供对包含比较的内容的隐式转换。(请参阅此问题“1 * BigInt(1)”如何工作,我该如何做?

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

于 2011-10-05T12:42:59.870 回答
0

对于 Casbah,这是无法做到的,因为ObjectId不会转换为ValidDateOrNumericType. 我最终使用了 Java API:

collection.find(new QueryBuilder().put("_id").lessThanEquals(maxId).get())
于 2012-02-12T19:45:37.850 回答