Spring Mongodb 聚合不适用于 DBRef



我有一个在mongodbspring boot中不起作用的聚合。如果有人能帮助我,我将不胜感激。这是我的ExplainDoc类:

@Document(collection = "ExplainDoc")
public class ExplainDoc{
    @Id
    private String id;
    @TextIndexed(weight=3)
    private String product_in_brief;
    private Product product;
    
    @TextScore
    private Float textScore; }

这是另一个类:

 @Document(collection = "product")
public class Product{   
    
    @Id 
    private String id;
    private String category;
}

我想做的是进行文本搜索,并找到所有在product_in_brief中具有给定文本的ExplainDoc,前提是他们的产品具有特定的类别。在我的搜索存储库中,我有如下的聚合:

public List<MyAggrResults> searchBriefExplanations(String text, String category){
            
MatchOperation matchRegion = Aggregation.match(Criteria.where("product.category").is(category));
TextCriteria criteria = TextCriteria.forDefaultLanguage().matchingAny(text);
MatchOperation match = Aggregation.match(criteria);
GroupOperation group =   Aggregation.group("product.category").push("$$ROOT").as("myresults").sum("textScore").as("score");
ProjectionOperation project = Aggregation.project("product_in_brief", "product").andExpression("{$meta: "textScore"}").as("textScore");
}

代码现在可以工作了。然而,我看到将product对象始终作为嵌套文档是如此昂贵。如果我想使用product对象作为@DBRef,我应该如何更改代码?当我添加@DBRef时,代码不再工作了。我认为原因是product.category不再被识别了。

我希望有人能帮助我。

DBRef没有什么特别之处可以神奇地提高它的效率。它只是集合名称和id组合的一个标签。您仍然需要使用聚合管道来查询使用DBRef的数据,就像在不使用DBRef时一样。

相关内容

  • 没有找到相关文章

最新更新