我有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吗?
答案 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())