簡體   English   中英

如何從MongoDB獲取ObjectId值?

[英]How to get the ObjectId value from MongoDB?

我在Java的Play framework 2使用Jongo 我在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;
    }
}

編輯

為了獲取數據,我僅使用Jongo提供的find()函數,如下所示:

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

您的ObjectId類型為de.undercouch.bson4jackson.types.ObjectId。 通過查看源代碼,您可以看到在該類上沒有定義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()

用@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實例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM