我正在查询具有嵌套对象的集合。域模型如下所示:
@Document(collection="a")
public class A {
protected Map<String, B> fields;
protected String uuid;
protected Date updatedTs;
//Getters and setters and other fields omitted
}
public class B{
protected String c;
protected String d;
}
我正在使用如下所示的条件进行查询:
{ "uuid" : "9DA291A4-1BAB-4B9C-844D-681C3F1ABF6E"}
我使用创建的
Criteria.where("uuid").is(uuid);
我可以看到条件对象不包含其他内容,因为我可以像这样打印出来:
log.debug("Criteria: " + SerializationUtils.serializeToJsonSafely(c.getCriteriaObject()));
如果我打开包 org.springframework.data.mongodb.core 的调试日志记录,我可以看到实际发送到服务器的查询是:
{ "uuid" : "9DA291A4-1BAB-4B9C-844D-681C3F1ABF6E"} fields: null
编辑:我的文档包含一个名为“字段”的字段,似乎我的代码或 mongoTemplate / spring-data 中的某些内容实际上正在搜索字段:null。MongoTemplate 的日志行让我感到困惑,因为 fields: null 实际上是指要返回的一组字段名称。
那么,如何在没有 spring-data 的情况下搜索与该 uuid 匹配的文档,只返回属性“fields”为空的文档?
同时,仍在研究如何解决这个问题,因为我无法更改文档结构......