MongoTemplate标准查询翻译似乎不正确

时间:2013-01-14 14:20:52

标签: java mongodb spring-data spring-data-mongodb

我正在查询具有嵌套对象的集合。域模型如下所示:

@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

编辑:我的文档包含一个名为“fields”的字段,似乎我的代码或mongoTemplate / spring-data中的某些内容实际上是在搜索字段:null。 MongoTemplate的日志行让我感到困惑,因为fields:null实际上是指要返回的一组字段名称。

那么,如何在没有spring-data的情况下搜索匹配该uuid的文档,只返回属性“fields”为null的文档?

与此同时,仍在调查如何绕过这个,因为我无法改变文档结构...

1 个答案:

答案 0 :(得分:1)

您在日志输出中看到的fields与您的域对象无关。这是通过将放在 JSON字符串中来表示的。在这种情况下,fields指的是为每个找到的文件返回的字段,基本上是projection mechanism.