我正在尝试使用 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 之前的样子,这就是为什么将其视为对象的原因。