Я использую Morphia, картографию Pojo для MongoDB, и мне трудно найти задачу, которая на мой взгляд должна быть очень простой: получение объекта по id. Я могу найти все объекты в коллекции, но я не могу понять простую задачу запроса с использованием идентификатора, полученного из списка. Я действительно говорю об ObjectId. Если я попытаюсь сделать это в JSON, я вижуQuerying Morphia by Id
ответ
Этот вопрос кажется неполным.
Также кажется, что ответ на ваш вопрос находится на Morphia QuickStart page. Кажется, это так просто.
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);
Значит, вам обязательно понадобится более подробная информация.
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);
Можете ли вы объяснить, почему ваш код работает или что он делает? Лучшие ответы объясняют это решение, а не только действующий код. – nathangiesbrecht 2013-04-16 16:48:33
@nathangiesbrecht В предыдущем [ответе] (http://stackoverflow.com/a/4475711/1094584) неверно. Идентификатор MongoDB не является типом String. Тип идентификатора MongoDB - ObjectId (org.bson.types.ObjectId). – 2013-04-17 10:04:50
Если вы обретение идентификатора и идентификатор предоставляются пользователем (означает, что это может быть любым типом данных), вы не должны использовать решение, приведенное выше.
Как объяснены в documentation, 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;
}
- 1. Querying flask-peewee REST API by datetime
- 2. Querying Cassandra in Rails by Cequel
- 3. Django Querying By Set Relationship (Reverse)
- 4. Morphia не распознает мое @ID аннотированное поле
- 5. Java MongoDB Morphia: найти объект ObjectId id
- 6. eWay issue: Querying by Transaction ID доступен только для транзакций, созданных с помощью Rapid
- 7. GROUP_CONCAT DISTINCT BY ID
- 8. GROUP BY ID диапазон?
- 9. delete row by id
- 10. имя поля «ClassName» вставляется в mongodb by morphia
- 11. sas recursive lag by id
- 12. AJAX call by anchor ID
- 13. sas - lag by acct id?
- 14. Richfaces - Get Element By Id
- 15. Javascript filter - return by id
- 16. JQuery select by form id
- 17. Get Element by ID looping
- 18. mdDialog select item by id
- 19. Slick select row by id
- 20. CursorAdapter get id by Cursor
- 21. Doctrine Order by id = 1
- 22. Morphia 0.110 не находит ссылки со строкой id
- 23. Morphia - HasAnyOf
- 24. morphia аннотация
- 25. Querying aMember
- 26. SQL Querying Incomplete Result
- 27. Morphia: Фильтрующий элемент в ArrayList с использованием Morphia
- 28. Querying - получить максимальное значение с длиной значения в «id»
- 29. Querying через java
- 30. Morphia сохранить не работают
не забудьте добавить «@Id ObjectId идентификатор» для лица. Это облегчит вам жизнь. – caarlos0 2011-09-21 17:05:23