![](/img/trans.png)
[英]How to Get Only Matched Result from An Array Field of Document in Mongo Using Spring Data
[英]Deserialized document from mongo missing one field. Using Spring Data Mongo
我有一个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;
}
}
当我运行代码时,将使用mongo文档中的所有值正确填充myDocument对象,但字段alterIds除外。 该字段为空。 对我在这里做错的任何想法。 在Spring Data Mongo版本中使用1.10.9 RELEASE。
因此,看起来这实际上可能是Spring Data Mongo软件包的缺陷。 我做了一个实验,将文档作为字符串获取,然后使用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);
问题应该是属性名称“ id”,尝试使用其他名称。 默认情况下,Mongo POJOS idProperty将id转换为_id。 此外,还有一个错误,“ Pojo编解码器转换缺少id字段 ”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.