java - Mongodb Java SDK 不使用@BsonProperty 作为字段名称

标签 java mongodb

我正在使用 mongodb-driver-sync库,版本:4.2.3在我的 Java 项目中将值插入到 MongoDB 集合中。当我插入它们时,字段名称不是 @BsonProperty 中的值注释,但 Java 变量名的小驼峰大小写。如何让它使用我的注释值?
我的 POJO 是:

public class Product {
    private ObjectId id;
    @BsonProperty(value = "product_sk")
    private String ProductSK;
    @BsonProperty(value = "product_id")
    private String ProductID;
    @BsonProperty(value = "upc")
    public String UPC;

    public ObjectId getId() {
        return id;
    }

    public Product setId(ObjectId id) {
        this.id = id;
        return this;
    }

    public String getProductSK() {
        return ProductSK;
    }

    public Product setProductSK(String productSK) {
        ProductSK = productSK;
        return this;
    }

    public String getProductID() {
        return ProductID;
    }

    public Product setProductID(String productID) {
        ProductID = productID;
        return this;
    }

    public Product setUPC(String uPC) {
        UPC = uPC;
        return this;
    }
}
我的插入代码是:
public void insertProduct(List<Product> products) {
    ConnectionString connectionString = new ConnectionString(MONGO_URI);
    CodecRegistry pojoCodecRegistry = fromProviders(PojoCodecProvider.builder().automatic(true).build());
    CodecRegistry codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), pojoCodecRegistry);
    MongoClientSettings clientSettings = MongoClientSettings.builder()
                                                            .applyConnectionString(connectionString)
                                                            .codecRegistry(codecRegistry)
                                                            .build();
    try (MongoClient mongoClient = MongoClients.create(clientSettings)) {
        MongoDatabase db = mongoClient.getDatabase(DATABASE);
        MongoCollection<Product> productCollection = db.getCollection("products", Product.class);
        productCollection.insertMany(products);
    }
}
输入的 BSON 是:
{ "_id" : ObjectId("60afb7be0af8954d7ce91b8f"), "productID" : "test1", "productSK" : 123, "uPC" : "test2" }
它应该是:
{ "_id" : ObjectId("60afb7be0af8954d7ce91b8f"), "product_id" : "test1", "product_sk" : 123, "upc" : "test2" }
我的依赖项是:
implementation 'com.google.code.gson:gson:2.8.6'
implementation group: 'org.mongodb', name: 'mongodb-driver-sync', version: '4.2.3'
implementation group: 'org.mongodb', name: 'mongodb-crypt', version: '1.2.0'

最佳答案

也许这是约定俗成的问题。您的属性都以大写字母开头。由于 getter/setter 约定建议此类属性应以小写字母开头,因此我会尝试以下操作:

private ObjectId id;
@BsonProperty(value = "product_sk")
private String productSK; // instead of ProductSK
@BsonProperty(value = "product_id")
private String productID; // instead of ProductID
@BsonProperty(value = "upc")
public String upc; // or uPC

关于java - Mongodb Java SDK 不使用@BsonProperty 作为字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67639351/

相关文章:

java - 兔子MQ。 Java客户端。是否可以在不在收到消息的同一线程上确认消息?

java - Android - 强制关闭、PDF 不可用、iText

java - 二维数组垂直和水平翻转

mongodb - Mongo Cluster 所需的最小配置服务器数量

mongodb - Mongo 删除数组索引

json - MongoDB : Update Modifier semantics of "$unset"

java - 从 Java 运行 unix 命令 - 身份验证失败

java - 是否有在像 Liferay 这样的 JSR 286 portlet 容器中使用并发后台进程的规定?

javascript - 动态创建mongo查询对象

angularjs - 如何在聚合 MongoDB 中设置 'cursor' 选项