найти по идентификатору объекта в Jongo

Я знаю, что этот вопрос невероятно прост... Заранее извиняюсь.

Я не могу найти Mongo по идентификатору с помощью Jongo.

Я старался

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 ) не определено. Что неудивительно, ведь частью какого объекта должна быть эта функция?

Мой вопрос: как найти по _id в Jongo?


person Wolfman Joe    schedule 16.05.2013    source источник
comment
С IMO Jongo было невероятно сложно начать работу, а работать с API было довольно сложно. Не лучший ответ на ваш вопрос, но я бы посмотрел на некоторые другие проекты для доступа к Mongo через Java. Я настоятельно рекомендую SpringData Mongo См. этот вопрос для некоторых достойных альтернатив.   -  person David Welch    schedule 16.05.2013
comment
Спасибо. Я не против того, чтобы мне предлагали альтернативы. Мы все еще экспериментируем с решениями для нашей потребности в docdb.   -  person Wolfman Joe    schedule 16.05.2013
comment
Это зависит от того, что вы хотите или в чем нуждаетесь, но начать работу с джонго не так уж и сложно. По общему признанию, у вас нет доступа к такому количеству опций, как с базовым Java-драйвером mongo, но ничто не мешает вам использовать их вместе.   -  person assylias    schedule 16.05.2013


Ответы (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);`
person Wolfman Joe    schedule 16.05.2013
comment
withOid() использует строку в качестве параметра. В случае сомнения в методе может быть полезно завершение вашей IDE :D collection.findOne(Oid.withOid(5194d46bdda2de09c656b64b)).as(Friend.class) - person yves amsellem; 17.05.2013
comment
@yvesamsellem Oid.withOid() - Оид. отсутствовал в документации. Благодарю вас! Трудно завершить IDE, когда у вас нет объекта для работы. - person Wolfman Joe; 17.05.2013
comment
Oid — это статический импорт. В документации посмотрите импорт :D - person yves amsellem; 17.05.2013
comment
Ооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо? (facepalms) Большое спасибо. - person Wolfman Joe; 17.05.2013
comment
Старый вопрос, но я подумал, что отвечу ради других в Google. Вы должны использовать Oid.withOid(‹some-id›), который внутренне возвращает следующий параметр запроса — {_id: {$oid:\ + id + \}}. Это был единственный способ заставить его работать в запросах и обновлениях по идентификаторам. - person sandman; 14.10.2016