当前位置: 首页 > 知识库问答 >
问题:

Spring Data MongoDB通过内部对象获取文档

夏骏
2023-03-14

在我的Spring Boot/Spring Data MongoDB项目中,我有以下POJO:

@Document(collection = "decision_analysis")
public class DecisionAnalysis {

    private String id;

    private DecisionAnalysisRequest decisionAnalysisRequest;

    private DecisionMatrixPageResponse decisionMatrixPage;

    private Date createDate;

    private HttpRequestData httpRequestData;

...

}

其中DecisionAnalysisRequest:

public class DecisionAnalysisRequest implements Serializable {

    private static final long serialVersionUID = 1493180175756424789L;

    private String decisionNameFilterPattern;

    private Set<BaseQuery> filterQueries;

    private Set<Long> sortCriteriaIds;

    private String sortWeightCriteriaDirection;

    private String sortTotalVotesCriteriaDirection;

    private Map<String, Double> sortCriteriaCoefficients;

    private Long sortCharacteristicId;

...

}
@Repository
public interface DecisionAnalysisRepository extends MongoRepository<DecisionAnalysis, String> {

    DecisionAnalysis findByDecisionAnalysisRequest(DecisionAnalysisRequest decisionAnalysisRequest);

}

FilterQueries是一个复合对象数组,例如:

 "filterQueries":[
      {
         "type":"AnyInQuery",
         "characteristicId":711903,
         "characteristicName":"Body type",
         "value":[
            "Compact"
         ],
         "operator":"OR"
      },
      {
         "type":"RangeQuery",
         "characteristicId":712745,
         "characteristicName":"Sensor photo detectors (megapixels)",
         "value":[
            10,
            53
         ]
      }
   ]

我做错了什么?如何调整代码,以便在FilterQueries包含数据的情况下,通过DecisionAnalysisRequest正确查找DecisionAnalysy文档。

更新

这是一个示例DecisionAnalysisRequest文档,我将使用它作为键(在UI上选择的每个用户每次该文档中的信息都不同):

{
   "sortCriteriaIds":[
      711882,
      711887,
      711884,
      711899,
      711896,
      711897,
      711890,
      711891,
      711888,
      711889,
      711895,
      711892,
      711893
   ],
   "sortCriteriaCoefficients":{

   },
   "pageNumber":0,
   "pageSize":10,
   "sortWeightCriteriaDirection":"DESC",
   "sortid":null,
   "sortCharacteristicDirection":null,
   "sortDecisionPropertyName":null,
   "sortDecisionPropertyDirection":null,
   "decisionsIds":[

   ],
   "persistent":true,
   "includeChildids":null,
   "excludeChildids":null,
   "filterQueries":[
      {
         "type":"AnyInQuery",
         "characteristicId":711913,
         "characteristicName":"Body material",
         "value":[
            "Aluminium alloy",
            "Brass",
            "Carbon fiber"
         ],
         "operator":"OR"
      },
      {
         "type":"AnyInQuery",
         "characteristicId":711903,
         "characteristicName":"Body type",
         "value":[
            "Compact SLR",
            "Compact"
         ],
         "operator":"OR"
      },
      {
         "type":"EqualQuery",
         "characteristicId":712746,
         "characteristicName":"Sensor size",
         "value":"1/1.7\" (7.44 x 5.58 mm)"
      },
      {
         "type":"AnyInQuery",
         "characteristicId":712895,
         "characteristicName":"Color space",
         "value":[
            "Adobe RGB",
            "ECI RGB",
            "Primary color space"
         ],
         "operator":"OR"
      },
      {
         "type":"AnyInQuery",
         "characteristicId":712145,
         "characteristicName":"Other resolutions",
         "value":[
            "1008 x 672",
            "1024 x 1024",
            "1024 x 576"
         ],
         "operator":"OR"
      },
      {
         "type":"AnyInQuery",
         "characteristicId":712738,
         "characteristicName":"Image ratio w:h",
         "value":[
            "1:1",
            "3:2",
            "4:3"
         ],
         "operator":"OR"
      },
      {
         "type":"RangeQuery",
         "characteristicId":712744,
         "characteristicName":"Effective pixels (megapixels)",
         "value":[
            9,
            44
         ]
      },
      {
         "type":"EqualQuery",
         "characteristicId":712901,
         "characteristicName":"Color filter array",
         "value":"RGB color filter array"
      },
      {
         "type":"EqualQuery",
         "characteristicId":712921,
         "characteristicName":"Image stabilization",
         "value":"Sensor-shift"
      },
      {
         "type":"AnyInQuery",
         "characteristicId":712944,
         "characteristicName":"Uncompressed format",
         "value":[
            "No",
            "RAW",
            "TIFF"
         ],
         "operator":"OR"
      },
      {
         "type":"AnyInQuery",
         "characteristicId":712928,
         "characteristicName":"Image parameters",
         "value":[
            "Brightness",
            "Color",
            "Color Space",
            "Color Tone",
            "Contrast"
         ],
         "operator":"OR"
      },
      {
         "type":"RangeQuery",
         "characteristicId":712919,
         "characteristicName":"White balance presets",
         "value":[
            2,
            10
         ]
      },
      {
         "type":"RangeQuery",
         "characteristicId":712917,
         "characteristicName":"Boosted ISO (minimum)",
         "value":[
            1762,
            10741
         ]
      },
      {
         "type":"AnyInQuery",
         "characteristicId":712950,
         "characteristicName":"File format",
         "value":[
            "3FR",
            "AGIF",
            "ARW"
         ],
         "operator":"OR"
      },
      {
         "type":"RangeQuery",
         "characteristicId":712918,
         "characteristicName":"Boosted ISO (maximum)",
         "value":[
            339298,
            2878034
         ]
      },
      {
         "type":"RangeQuery",
         "characteristicId":713340,
         "characteristicName":"Normal focus range (cm)",
         "value":[
            22,
            131
         ]
      },
      {
         "type":"EqualQuery",
         "characteristicId":713343,
         "characteristicName":"Lens mount",
         "value":"Leica M"
      },
      {
         "type":"AnyInQuery",
         "characteristicId":713325,
         "characteristicName":"Autofocus",
         "value":[
            "Center",
            "Continuous",
            "Contrast Detect (sensor)",
            "Face Detection",
            "Live View"
         ],
         "operator":"OR"
      },
      {
         "type":"RangeQuery",
         "characteristicId":713341,
         "characteristicName":"Macro focus range (cm)",
         "value":[
            19,
            75
         ]
      },
      {
         "type":"RangeQuery",
         "characteristicId":713342,
         "characteristicName":"Number of focus points",
         "value":[
            78,
            468
         ]
      },
      {
         "type":"RangeQuery",
         "characteristicId":713388,
         "characteristicName":"Viewfinder resolution (dots)",
         "value":[
            633548,
            3722581
         ]
      },
      {
         "type":"RangeQuery",
         "characteristicId":713386,
         "characteristicName":"Viewfinder coverage %",
         "value":[
            84,
            97
         ]
      }
   ]
}

共有1个答案

沃学
2023-03-14

查询是在服务器端运行的,因此必须从服务器的角度来看性能。

对于文档连续数据增长,您将达到16MB内存限制。

您必须使用点表示法到达FilterQueries嵌入式文档进行比较。

@Query("{decisionAnalysisRequest.filterQueries :?0}")
DecisionAnalysis findByDecisionAnalysisRequest(BasicQuery filter);

在将输入DecisionAnalysisRequest与数据库DecisionAnalysisRequest进行比较时没有得到响应的原因是,该数据库具有更多FilterQueries

您应该研究document/embedded document/embedded数组上字段的比较标准,而不是比较整个document/embedded document/embedded数组。

 类似资料:
  • 问题内容: 我有以下代码。我想掌握用来创建内部类对象的外部类对象。我该怎么做? 编辑:好,你们中的一些人建议通过添加方法来修改内部类: 但是,如果我没有控制权来修改内部类,那(只是确认一下),我们还有其他方法可以从内部类对象中获取相应的外部类对象吗? 问题答案: 在内部类本身中,你可以使用。该表达式允许引用任何词法包围的实例,在JLS中被描述为。 我认为没有办法从内部类的代码之外获取实例。当然,你

  • 问题内容: 我的问题与JVM的安全级别有关 我们如何通过证明哈希码来从内存中获取对象? 今天我在想。我在执行环境One中创建类A的对象。并从此处获取该对象的哈希码。 现在在另一个执行环境中,我想通过提供哈希码来返回A类对象。 我认为有可能。因为当我执行环境一时。我一次又一次地得到那个JVM返回相同的哈希码。 表示它首先在其缓存中找到对象。如果得到引用,则将其返回。 现在回到问题,我们必须了解在编写

  • 4.4. 通过 getattr 获取对象引用 4.4.1. 用于模块的 getattr 4.4.2. getattr 作为一个分发者 你已经知道 Python 函数是对象。 你不知道的是,使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用。 例 4.10. getattr 介绍 >>> li = ["Larry", "Curly"] >>> li.pop

  • 问题内容: 具有内部字段的枚举,有点像地图。 现在,我需要按其内部字段枚举。 写下: 但是,每次需要查找适当的实例时,对所有枚举进行查找并不是非常有效。 还有其他方法可以做到吗? 问题答案: 您可以将a 与初始化程序一起使用,该初始化程序将使用由其字段键入的值来填充它。 请注意,已完成,也已完成。 您现在可以期望是一个操作。 参考文献 JLS 8.7静态初始值设定项 JLS 8.9枚举 注意 该方

  • 我有两个表1)krs_question_bank 2)krs_options 而我正在调用Session.Save(问题)。生成了Hibernate查询,但..我有以下错误。有什么办法可以解决这个错误吗?

  • 问题内容: 我从字符串定义一个新的gson对象: 此处的字符串示例:http : //api.soundrop.fm/spaces/XJTt3mXTOZpvgmOc 然后尝试返回一个值: 最后用: 但是我得到一个错误: 完整班:主班:http : //pastebin.com/v4LrZm6k 无线电班:http : //pastebin.com/2BWwb6eD 问题答案: 这是Java。字段根