1

我正在尝试使用 Panache 和 Quarkus 将数据添加到 mongodb 集合中。我正在尝试插入一个嵌套文档,如下所示

{
    "user_id": 8001,
    "name": "John John",
    "email":"jj@justiceleague.com",
    "entity":6,
    "business_unit": 3,
    "contact_person":"Bats Nopower",
    "contact_person_phone":"+25472000001",
    "verification_data":{
        "national_id": "987643",
        "tax_pin":"A0GYE09753ew",
        "driving_licence":"6473412"
    },
    "country":"KE"
}

但是,当我插入数据时,这就是它的样子

{
  "_id": {
    "$oid": "609472b1b410cd46bc3bc674"
  },
  "business_unit": 3,
  "country": "KE",
  "created_date": {
    "$date": "2021-05-07T01:50:25.341Z"
  },
  "email": "jj@justiceleague.com",
  "entity": 6,
  "name": "John John",
  "user_id": 8001,
  "verification_data": {
    "verification_data": {
      "national_id": "987643",
      "tax_pin": "A0GYE09753ew",
      "driving_licence": "6473412"
    }
  }
}

验证数据嵌套在另一个验证数据中。不确定缺少什么

这就是我的数据类的样子

@MongoEntity(collection="basic_info")
public class BasicInfo extends PanacheMongoEntity {
  @SerializedName("user_id")
  @BsonProperty("user_id")
  public Integer userId;
  public String name;
  public String email;
  public Integer entity;
  @BsonProperty("business_unit")
  public Integer businessUnit;
  @BsonProperty("contact_person")
  public String contactPerson;
  @BsonProperty("contact_person_phone")
  public String contactPhone;
  @BsonProperty("created_date")
  public LocalDateTime createdDate;
  public String country;
  @BsonProperty("verification_data")
  public Object verificationData;

  //getters and setters
}

这就是我保存数据的方式

  public void addBasicInfo(BasicInfo basicInfo) {
    BasicInfo initialData = new BasicInfo();
    
    initialData.setUserId(basicInfo.getUserId());
    initialData.setName(basicInfo.getName());
    initialData.setEmail(basicInfo.getEmail());
    initialData.setEntity(basicInfo.getEntity());
    initialData.setBusinessUnit(basicInfo.getBusinessUnit());
    initialData.setVerificationData(basicInfo.getVerificationData());
    initialData.setCountry(basicInfo.getCountry());
    initialData.setCreatedDate(LocalDateTime.now());
    
    initialData.persist();
  }

这就是我的编解码器的样子

public class ObjectCodec implements Codec<Object> {
  
  private final Codec<Document> documentCodec;
  
  public ObjectCodec() {
    this.documentCodec = MongoClientSettings.getDefaultCodecRegistry().get(Document.class);
  }
  
  @Override
  public void encode(BsonWriter writer, Object object, EncoderContext encoderContext) {
    Document doc = new Document();
    doc.put("verification_data", object);
    documentCodec.encode(writer, doc, encoderContext);
  }
  
  @Override
  public Class<Object> getEncoderClass() {
    return Object.class;
  }
  
  //...
}

注意:我不知道 verify_data 之前的样子,这就是为什么将其视为对象的原因。

4

0 回答 0