我正在使用Morphia,MongoDB的Pojo映射器,我觉得很难在我看来应该很简单的任务:通过id获取一个对象。我能够找到集合中的所有对象,但我无法弄清楚使用从列表中获取的id查询的简单任务。我其实在谈论ObjectId。如果我尝试用JSON渲染它,我会看到
答案 0 :(得分:14)
这个问题似乎不完整。
似乎问题的答案在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);
所以你肯定需要更多细节。
答案 1 :(得分:8)
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);
答案 2 :(得分:6)
如果你是通过id找到并且id是由用户提供的(意味着它可以是任何类型的数据),你就不应该使用上面给出的解决方案。
正如documentation中所述,ObjectId 包含12个字节,因此如果您将其他内容传递给new ObjectId(myValue)
,您的代码将抛出IllegalArgumentException
以下是我通过id实现查找方法的方法:
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;
}