我有一个Mongo集合,其文档如下所示。实际上还有很多其他领域,但alternateIds在结构上是独一无二的,也是一个问题。
{
"_id": 99999,
"alternateIds": {
"id": [{
"id": "999",
"idSpace": "SPACE1"
}]
}
}
我使用Spring Data Mongo将文档导入POJO,如下所示。
MongoOperations mongoOperations = mongoInstance.getMongoOperations("myMongoDb");
MongoMyDocument myDocument = mongoOperations.findOne(
new Query(Criteria.where("_id").is(Long.parseLong(idUnderTest))),
MongoMyDocument.class, "myMongoCollection"
);
接收文档的类如下。同样,实际的POJO还有很多其他字段,但所有其他字段都填充得很好,所以我为了简单起见将它们排除在外。
public class MongoMyDocument {
private Long id;
private MongoAlternateIdSegment alternateIds;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public MongoAlternateIdSegment getAlternateIds() {
return alternateIds;
}
public void setAlternateIds(MongoAlternateIdSegment alternateIds) {
this.alternateIds = alternateIds;
}
}
public class MongoAlternateIdSegment {
private List<MongoIdSegment> id;
public List<MongoIdSegment> getId() {
return id;
}
public void setId(List<MongoIdSegment> id) {
this.id = id;
}
}
public class MongoIdSegment {
private String id;
private String idSpace;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIdSpace() {
return idSpace;
}
public void setIdSpace(String idSpace) {
this.idSpace = idSpace;
}
}
当我运行代码时,myDocument对象会使用mongo文档中的所有值正确填充,但字段alternateIds除外。该字段为空。关于我在这里做错了什么的任何想法。使用1.10.9 RELEASE作为Spring Data Mongo版本。
答案 0 :(得分:0)
所以看起来这可能实际上是Spring Data Mongo包的缺陷。我做了一个实验,我将文档作为String,然后使用GSON将其反序列化到我的目标对象,它工作正常。 alternateIds字段已填充。例如:
String jsonDocument = mongoOperations.findOne(new Query(Criteria.where("_id").is(testId)), String.class, "myMongoCollection");
Gson gson = new Gson();
MongoMyDocument myDocument = gson.fromJson(jsonDocument, MongoMyDocument.class);
答案 1 :(得分:0)
问题应该是属性名称“id”,请尝试使用其他名称。 默认情况下,Mongo POJOS idProperty将id转换为_id。 此外,还有一个错误,“Pojo codec conversion missing id field”