Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoTemplate条件查询转换似乎不正确_Java_Mongodb_Spring Data_Spring Data Mongodb - Fatal编程技术网

Java MongoTemplate条件查询转换似乎不正确

Java MongoTemplate条件查询转换似乎不正确,java,mongodb,spring-data,spring-data-mongodb,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 S

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

@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"}
log.debug("Criteria: " + SerializationUtils.serializeToJsonSafely(c.getCriteriaObject()));
我使用

Criteria.where("uuid").is(uuid);
我可以看到criteria对象不包含其他内容,因为我可以这样打印出来:

@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"}
log.debug("Criteria: " + SerializationUtils.serializeToJsonSafely(c.getCriteriaObject()));
如果打开包org.springframework.data.mongodb.core的调试日志记录,我可以看到实际发送到服务器的查询是:

{ "uuid" : "9DA291A4-1BAB-4B9C-844D-681C3F1ABF6E"} fields: null
编辑:我的文档包含一个名为“fields”的字段,似乎我的代码或mongoTemplate/spring数据中的某些内容实际上在搜索字段:null。MongoTemplate中的日志行让我感到困惑,因为fields:null实际上是指要返回的一组字段名

那么,如果没有spring数据只返回属性“fields”为null的文档,如何搜索与uuid匹配的文档


同时,仍在研究如何解决这个问题,因为我无法更改文档结构…

您在日志输出中看到的
字段
与您的域对象无关。这通过将其放置在JSON字符串之外来表示<代码>字段在这种情况下,是指为找到的每个文档返回的字段,这些文档本质上是一个

您在日志输出中看到的
字段
与您的域对象无关。这通过将其放置在JSON字符串之外来表示<代码>字段在这种情况下,是指为找到的每个文档返回的字段,这些文档本质上是一个

您的查询将只返回a类文档,因为只有a类具有UUID字段。字段:null表示其他所有字段。在调试模式打开的情况下,我一直看到这一点。很可能您只查询了特定的UUID,而字段恰好为空。可能是我的映射错误,但我不确定。我的文档是这样构造的:{uuid:“abc123”,字段:{“a”:b”,“c”:{“d”:true}}}。这就是我所说的嵌套文档。除了我所做的之外,我不知道还有什么其他方法可以合理地映射它。我知道查询只会返回集合“a”中的文档,为什么不尝试查询{fields.a:“b”}然后看看它是否有效?嗯。如果我不使用任何条件进行查询,我会得到集合中的所有文档,以及所有嵌套文档。如果我查询给定的uuid和某个字段值,我会得到所有具有该字段值的文档,而不考虑uuid。这就好像它忽略了该部分条件。实际上,放弃最后一部分-我会得到所有没有任何条件的文档ia,如预期,但如果我添加包含已知嵌套对象的节点查询(在mongo shell中运行时返回400多个文档),然后我没有得到任何结果您的查询将只返回类A中的文档,因为只有类A有UUID字段。字段:null意味着其他所有内容。在调试模式打开时,我一直看到这一点。很可能您只查询特定的UUID,字段恰好为null。可能是我的映射错误,但我不确定。我的d文档的结构如下:{uuid:“abc123”,字段:{“a”:b”,“c”:{“d”:true}}。这就是我所说的嵌套文档的意思。除了我所做的以外,我不知道还有什么其他的方法可以合理地绘制这张地图。我知道查询只会返回集合“A”中的文档,为什么不尝试查询{fields.A:“b”}并查看它是否有效?嗯。如果我不使用任何条件进行查询,我将获得集合中的所有文档,以及所有嵌套文档。如果我查询一个给定的uuid和一些字段值,那么不管uuid是什么,我都会得到具有该字段值的所有文档。这就像是忽略了标准的这一部分。事实上,放弃最后一个-我得到了所有没有标准的文档,正如预期的那样,但是如果我添加了一个包含已知嵌套对象的节点查询(在mongo shell中运行时返回400多个文档),那么我将不会得到任何结果是的,谢谢,我想-它只是暂时扔了我,因为它与我的一个文档属性同名。当我查看MongoTemplate的源代码时,我看到了它所记录的内容。是的,谢谢,我想-它只是暂时把我扔了出去,因为它与我的一个文档属性同名。当我查看MongoTemplate的源代码时,我看到了它所记录的内容