【问题标题】:guarantee fields order in a mongodb documents using mongodb java driver使用 mongodb java 驱动程序保证 mongodb 文档中的字段顺序
【发布时间】:2022-01-08 02:32:22
【问题描述】:

使用 MongoDB 驱动程序 4.1.0(和 quarkus 1.1.1),我有一个带有复合 _id 的实体:

@BsonId
@JsonProperty("_id")
private CompositeId id = new CompositeId();

@Data
@AllArgsConstructor
@NoArgsConstructor
public static class CompositeId {
    @BsonProperty("b")
    private int b;
    @BsonProperty("a")
    private String a;
}

(其中 a 实际上是一个 ObjectId 十六进制字符串)

保存实体后,_id 字段按字母顺序保留:

"_id" : {
    "a" : "61a480509da3560292eb1ab5",
    "b" : 1234
},

稍后,使用pymongo 在其他地方插入相同的逻辑实体:

collection.update_one({'_id': id}, {'$set': ...

查询文档中的id是由pythonOrderedDict构造的,b为第一,a为第二。

所以我最终得到了两个相同的文档集合,仅在 _id 字段顺序上有所不同:

{
    "_id" : {
        "a" : "61a480509da3560292eb1ab5",
        "b" : 1234
    },
    // rest of identical fields for Java inserted document
}
{
    "_id" : {
        "b" : 1234,
        "a" : "61a480509da3560292eb1ab5"
    },
    // rest of identical fields for Python upserted document
}

所以,我的问题是,有没有一种方法可以配置 Java 驱动程序以保留文档中字段的顺序(例如 @JsonPropertyOrder)或者不太现实,使用 quarkus/panache 配置?

【问题讨论】:

    标签: java mongodb quarkus mongo-java-driver quarkus-panache


    【解决方案1】:

    构造一个 Bson 文档就可以了:

    Document id = new Document();
    id.append("b", 1234);
    id.append("a",  new ObjectId().toHexString());
    Document entity = new Document("_id", id);
    ...
    

    【讨论】:

      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2016-03-13
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多