【问题标题】:find by Object Id in Jongo在 Jongo 中按对象 ID 查找
【发布时间】:2013-05-11 10:46:15
【问题描述】:

我知道这个问题非常基本......我很抱歉。

我无法使用 Jongo 为 Mongo 执行“按 ID 查找”。

我试过了

Iterator<MongoTest> all = db.getCollection("mongoTest").find("{'_id': ObjectId('5194d46bdda2de09c656b64b')}").as(MongoTest.class).iterator();

错误:

java.lang.IllegalArgumentException: {'_id': ObjectId('5194d46bdda2de09c656b64b')} cannot be parsed
at org.jongo.query.JsonQuery.marshallQuery(JsonQuery.java:34)
at org.jongo.query.JsonQuery.<init>(JsonQuery.java:27)
at org.jongo.query.JsonQueryFactory.createQuery(JsonQueryFactory.java:52)
at org.jongo.Find.<init>(Find.java:41)
at org.jongo.MongoCollection.find(MongoCollection.java:79)
at org.jongo.MongoCollection.find(MongoCollection.java:75)

我试过了

Iterator<MongoTest> all = db.getCollection("mongoTest").find(withOid(new ObjectId("5194d46bdda2de09c656b64b"))).as(MongoTest.class).iterator();

与文档中的完全一样,我什至无法编译它...有两种可能的 ObjectId 类型。

de.undercouch.bson4jackson.types.ObjectId;

告诉我

The constructor ObjectId(String) is undefined

如果我使用

org.bson.types.ObjectId;

有时它似乎工作得更好 - 但它仍然告诉我withOid( ObjectId ) 未定义。这并不完全令人惊讶,因为该函数应该属于哪个对象?

我的问题:如何在 Jongo 中通过 _id 进行查找?

【问题讨论】:

  • IMO Jongo 上手非常困难,而且使用 API 非常痛苦。您的问题不是一个很好的答案,但我会看看其他一些通过 Java 访问 Mongo 的项目。我强烈推荐SpringData Mongo 请参阅this question 了解一些不错的选择。
  • 谢谢。我不介意被提供替代品。我们仍在尝试解决我们对 docdb 的需求。
  • 这取决于您想要或需要什么,但 jongo 并不是“非常难以入门”。诚然,您无法使用基本 mongo Java 驱动程序那么多的选项,但没有什么能阻止您一起使用它们。

标签: java mongodb jongo


【解决方案1】:

有人帮我在别处找到答案,把它放在这里供后人使用

一个有效的结构是

db.getCollection("mongoTest")
  .find("{ _id: # }", new ObjectId("5194d46bdda2de09c656b64b"))
  .as(MongoTest.class);

使用org.bson.types.ObjectId

db.getCollection("mongoTest")
  .findOne(Oid.withOid("5194d46bdda2de09c656b64b"))
  .as(MongoTest.class);`

【讨论】:

  • withOid() 使用字符串作为参数。如果对方法有疑问,您的 IDE 补全可能会有所帮助:D collection.findOne(Oid.withOid("5194d46bdda2de09c656b64b")).as(Friend.class)
  • @yvesamsellem Oid.withOid() - Oid。文档中缺少。谢谢!当您没有要使用的对象时,很难在 IDE 中完成。
  • Oid 是静态导入。在文档中,查看导入:D
  • 哦,我看到了。 (捂脸)非常感谢。
  • 老问题,但我想我会为了谷歌上的其他人而回复。您必须使用 Oid.withOid(),它在内部返回以下查询参数 - "{_id: {$oid:\"" + id + "\"}}"。这是我可以让它在查询和 id 更新中工作的唯一方法。
猜你喜欢
  • 2022-01-18
相关资源
最近更新 更多