我正在使用 Morphia,MongoDB 的 Pojo 映射器,我发现在我看来应该非常简单的任务很困难:通过 id 获取对象。我能够找到集合中的所有对象,但我无法弄清楚使用从列表中获得的 id 进行查询的简单任务。我实际上是在谈论 ObjectId。如果我尝试用 JSON 渲染它,我会看到
问问题
14453 次
3 回答
13
这个问题似乎不完整。
您的问题的答案似乎也在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);
所以你肯定需要更多的细节。
于 2010-12-17T23:39:46.390 回答
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);
于 2013-04-16T16:27:51.893 回答
6
如果您通过 id 查找并且 id 由用户提供(意味着它可以是任何类型的数据),则不应使用上面给出的解决方案。
如文档中所述,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;
}
于 2014-03-04T23:24:42.580 回答