首页 > 解决方案 > MongoRepository 防止递归 dbref

问题描述

我有一个看起来像这样的 mongo 集合:

{
    "_id" : "brand1ID",
    "brand" : "brand1"
    "competitors" : [
        {
            "$ref" : "brands",
            "$id" : "brand2ID",
            "$db" : "my-db"
        }
    ]
}
{
    "_id" : "brand2ID",
    "brand" : "brand2"
    "competitors" : [
        {
            "$ref" : "brands",
            "$id" : "brand1ID",
            "$db" : "my-db"
        }
    ]
}

和一个像这样的Java类:

public class Brand {
    
    @Id
    private String id;

    private String brand;

    @DBRef(lazy = true)
    private List<Brand> competitors;
}

我想如果我@DBRef(lazy = true)在 Java 类中添加竞争者属性,它不会在子类中加载竞争者,但情况似乎并非如此。如果我不放它,它只会以错误作为响应而中断,如果我放它,它会以大约 150 次迭代返回,然后出现有关堆栈溢出的错误。无论如何有可能实现这种行为?如果没有,还有什么替代方案?我不能将它们嵌入,因为所有条目都是某种品牌,而且它们都会有其他品牌的竞争对手。查找“brand1”时所需的结果如下所示:

{
    "_id" : "brand1ID",
    "brand" : "brand1"
    "competitors" : [
        {
            "_id" : "brand2ID",
            "brand" : "brand2"
            "competitors" : null
        }
    ]
}

这可能更像是一项 SQL 工作,但我坚持使用 Mongo。一个想法可能是将 ID 保存到列表中,然后单独查询它们,但我试图在单个查询中执行此操作。

标签: javaspringmongodbspring-data-mongodb

解决方案


推荐阅读