如何从MongoDB获取ObjectId值?

时间:2014-06-05 08:50:37

标签: java mongodb playframework-2.0 jackson jongo

我使用JongoPlay framework 2,java。我在MongoDB添加了一些数据。

{"_id" : ObjectId("538dafffbf6b562617252178"), ... }

然而,当我从数据库中获取ObjectId时,它给了我:

de.undercouch.bson4jackson.types.ObjectId@484431ff代替538dafffbf6b562617252178。我不太明白如何获得ObjectId值。我的课程定义如下:

public class Product {
    @JsonProperty("_id")
    protected String id;
    ...
    public Product() {
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

修改

为了获取数据,我只需使用find()提供的Jongo功能,如下所示:

public static Iterable<Product> findAll(){
    return products().find().as(Product.class);
}

2 个答案:

答案 0 :(得分:1)

您的ObjectId的类型为de.undercouch.bson4jackson.types.ObjectId。通过查看source,您可以看到该类未定义toString方法,因此使用默认的toString实现。

MongoDB的ObjectId实际上是使用以下构造的12位BSON类型:

a 4-byte value representing the seconds since the Unix epoch,
a 3-byte machine identifier,
a 2-byte process id, and
a 3-byte counter, starting with a random value.

你正在使用的类有点不同 - 它在内部存储为3个整数。它具有公开getTimegetMachinegetInc方法,因此您可以使用这些值创建自己的方法。这样的事情可能会让你得到你想要的东西:

(id.getTime() + id.getMachine() + ide.GetInc()).toHexString()

答案 1 :(得分:1)

用@JsonProperty(“_ id”)注释的

id字段只表示您的产品文档具有自定义ID(即由用户设置,例如:1234,5678,...)

您应该使用@Id和@ObjectId注释来注释id字段,以告诉Jongo将id字段作为由MongoDB管理的真实ObjectId来处理。

public class Product {

@org.jongo.marshall.jackson.oid.Id
@org.jongo.marshall.jackson.oid.ObjectId
protected String id;
...
  public Product() {
  }
}

在反序列化期间,ObjectId的字符串表示将被设置到Product instances