对比ObjectId查询

发布于 2024-12-08 18:51:41 字数 669 浏览 2 评论 0原文

我有 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 进行吗? ?

I have val maxId = new ObjectId(...) and I want to query something like this: collection.find("_id" $lte maxId). This is a compilation failure since ObjectId doesn't include the appropriate trait ValidDateOrNumericType. How to properly query objects by comparing their ID?

In the Mongo shell this seems to be possible:

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

Also with the Java driver it works:

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

Is this doable with Casbah?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情栀口红 2024-12-15 18:51:41

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

您可以使用“pimp my library”来提供对包含比较的内容的隐式转换。 (参见这个问题 “1 * BigInt(1)”如何工作以及我如何做同样的事情?

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

You can implement the comparison 'operator' as a method. To use it your ObjectId has to be on the left side of the comparison.

You can use the "pimp my library" to provide a implicit conversion to something that contains the comparison. (see this question How does ‘1 * BigInt(1)’ work and how can I do the same?)

Or you can implement a trait which offers the desired functionality.

残龙傲雪 2024-12-15 18:51:41

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

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

With Casbah this can not be done, since ObjectId does not convert to ValidDateOrNumericType. I ended up using the Java API:

collection.find(new QueryBuilder().put("_id").lessThanEquals(maxId).get())
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文