我使用Jongo
与Play 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);
}
答案 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个整数。它具有公开getTime
,getMachine
和getInc
方法,因此您可以使用这些值创建自己的方法。这样的事情可能会让你得到你想要的东西:
(id.getTime() + id.getMachine() + ide.GetInc()).toHexString()
答案 1 :(得分:1)
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
中