【问题标题】:mongodb-java POJO not returning idmongodb-java POJO 不返回 id
【发布时间】:2021-05-30 13:30:48
【问题描述】:

我是 MongoDB 新手,在这里有点疯狂。我正在使用最新的 mongo-java-driver 版本和 dropwizard。

我使用 POJO 写入 DDBB,它有效。但是,在尝试获取元素时,我没有得到实际的 _id。这是我尝试过的:

DDBB 文档

{
   _id:603c249cbb33487d9baa49f8,
   name:"John"
}

人员类

public class Person {

    @BsonProperty("_id")
    @BsonId
    private ObjectId id;

    @NotNull
    @JsonProperty
    private String name;

}

返回:

{
    "id": {
        "timestamp": 1614554268,
        "counter": 11160056,
        "machineIdentifier": 12268360,
        "processIdentifier": 32155,
        "timeSecond": 1614554268,
        "time": 1614554268000,
        "date": 1614554268000
    },
    "name": "John"
}

如您所见,它不会返回实际的 _id(例如 603c249cbb33487d9baa49f8)。我尝试将 id 设为字符串,但出现错误 Failed to decode 'Person'. Decoding '_id' errored with: readString can only be called when CurrentBSONType is STRING, not when CurrentBSONType is OBJECT_ID.

我遵循了几个指南,并在这里搜索了问题,但似乎没有任何效果。

非常感谢任何帮助!

【问题讨论】:

    标签: java mongodb dropwizard mongodb-java


    【解决方案1】:

    你不需要使用@BsonId,你可以简单地使用@Id,并且id字段的data-type应该是String。在这种情况下,您将获得由 mongo 生成的12bit Id。

    public class Person {
    
        @Id
        private String id;
    
        @NotNull
        @JsonProperty
        private String name;
    
    }
    

    【讨论】:

      【解决方案2】:

      您可以只使用@MongoId 而不是@BsonId

      public class Person {
      
          @MongoId
          private String id;
      
          @NotNull
          @JsonProperty
          private String name;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-12
        • 2018-09-15
        • 2016-12-08
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多