5

我正在使用 Morphia,MongoDB 的 Pojo 映射器,我发现在我看来应该非常简单的任务很困难:通过 id 获取对象。我能够找到集合中的所有对象,但我无法弄清楚使用从列表中获得的 id 进行查询的简单任务。我实际上是在谈论 ObjectId。如果我尝试用 JSON 渲染它,我会看到

4

3 回答 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 回答