Опрос Morphia по Id - PullRequest
       5

Опрос Morphia по Id

5 голосов
/ 17 декабря 2010

Я использую Morphia, картограф Pojo для MongoDB, и мне трудно выполнить задачу, которая, на мой взгляд, должна быть очень простой: получение объекта по id.Я могу найти все объекты в коллекции, но не могу понять простую задачу запроса, используя идентификатор, полученный из списка.Я на самом деле говорю об ObjectId.Если я пытаюсь сделать это в формате JSON, я вижу

Ответы [ 3 ]

14 голосов
/ 18 декабря 2010

Этот вопрос кажется неполным.

Похоже, что ответ на ваш вопрос находится на странице Morphia QuickStart .Кажется, все так просто:

Datastore ds = morphia.createDatastore("testDB");
String hotelId = ...; // the ID of the hotel we want to load
// and then map it to our Hotel object
Hotel hotel = ds.get(Hotel.class, hotelId);

Так что вам определенно понадобится больше деталей.

8 голосов
/ 16 апреля 2013
Datastore ds = morphia.createDatastore("testDB");
String hotelId = "516d41150364a6a6697136c0"; // the ID of the hotel we want to load
ObjectId objectId = new ObjectId(hotelId);
// and then map it to our Hotel object
Hotel hotel = ds.get(Hotel.class, objectId);
6 голосов
/ 05 марта 2014

Если вы находите по идентификатору, а идентификатор предоставляется пользователем (это означает, что это могут быть данные любого типа), вам не следует использовать решения, приведенные выше.

Как объяснено в документации , ObjectId состоит из 12 байтов , поэтому, если вы передадите что-то еще в new ObjectId(myValue), ваш код выдаст IllegalArgumentException.

Вот как я реализовал метод поиска по идентификатору:

public Model findById(String id) throws NotFoundException {
    if (!ObjectId.isValid(id)) {
        throw new NotFoundException();
    }

    ObjectId oid = new ObjectId(id);
    Model m = datastore().find(Model.class).field("_id").equal(oid).get();
    if (m == null) {
        throw new NotFoundException();
    }
    return m;
}
...