spring mongodb聚合不能与dbref一起工作

f8rj6qna  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(387)

我有一个聚合在 mongodb 以及 spring 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;
}

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

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 再也认不出来了。
我希望有人能帮我。

m0rkklqb

m0rkklqb1#

dbref并没有什么特别之处,它神奇地提高了效率。它只是集合名称和id组合的一个标签。您仍然需要使用聚合管道来查询使用dbref的数据,查询方式与不使用dbref时相同。

相关问题