使用 Spring 数据获取基于 MongoDB 中 DBRef 的嵌入文档

Get Embed Document based on DBRef in MongoDB using Spring data

我正在开发 spring 启动应用程序。我有 2 个型号

个人实体

@Data
@Document(collection = "products")
public class ProductEntity implements Serializable {

    private static final long serialVersionUID = -8118791879505582652L;

    @MongoId(FieldType.STRING)
    private String id;

    @Indexed
    @Field("name")
    private String name;
    
    @Field("category")
    @DBRef(lazy = true)
    private CategoryEntity category;
    
    // getters and setters
}

类别实体

@Data
@Document(collection = "categories")
public class CategoryEntity implements Serializable {

    private static final long serialVersionUID = -636356399519451958L;

    @MongoId(value = FieldType.STRING)
    private String id;

    @Field("name")
    private String name;

    @Field("desc")
    private String desc;
    
    public CategoryEntity(String id) {
        super();
        this.id = id;
    }
    // getters and setters
}

当我将数据保存到数据库中时,存储的数据是

产品文档

{
    "_id": {
        "$oid": "6141eeab92432109463ae8c4"
    },
    "name": "Adidas Running Shoes",
    "category": {
        "$ref": "categories",
        "$id": "614049d91042cf40b5b9b304"
    }
}

类别文件

{
    "_id": {
        "$oid": "614049d91042cf40b5b9b304"
    },
    "name": "Shoes",
    "desc": "Men's running Shoes",
}

但是当我尝试使用 Spring-Data-MongoDB findAll() ProductEntity 数据时,类别将 return null.

public List<ProductModel> getProducts() {
    List<ProductEntity> entities = productRepo.findAll();
    return entities.stream().map(entity -> {
        ProductModel product = new ProductModel();
        BeanUtils.copyProperties(entity, product);
        if (Objects.nonNull(entity.getCategory())) {
            BeanUtils.copyProperties(entity.getCategory(), product.getCategory());
        }
        return product;
    }).collect(Collectors.toList());
}

我需要输出格式如下。

{
    "_id": {
        "$oid": "6141eeab92432109463ae8c4"
    },
    "name": "Adidas Running Shoes",
   
    "category": {
        "_id": {
            "$oid": "614049d91042cf40b5b9b304"
        },
        "name": "Shoes",
        "desc": "Men's running Shoes",
    }
}

请告诉我如何获得所需的输出。

我做了一个小改动,问题已经解决。我变了

来自

@MongoId(value = FieldType.STRING)
private String id; 

@MongoId(value = FieldType.OBJECT_ID) 
private ObjectId id;

实体和代码都有效!