繁体   English   中英

如何使用 spring 框架检索 Firestore 中的子集合?

[英]How can I retrieve a subcollection in firestore with spring framework?

我有一个存储在 Firestore 上的数据库,其结构如下:

-Collection
----Document
-------Subcollection
----------Documents with Data
----Document
-------Subcollection
----------Documents with Data
----Document
-------Subcollection
----------Documents with Data

我想检索位于子集合中的文档,但我似乎无法使用以下代码:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collectionName = "states")
public class State {

    @DocumentId
    String name;

    int num_of_listings;
    Flux<Listing> listings;
}

清单的代码是:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collectionName = "listings")
public class Listing {

    @DocumentId
    String id;

    String description;
}

想象一下每个“状态”都包含一些“列表”。 每个 POJO 都伴随着一个 controller 和FirestoreReactiveRepository类型的存储库注入,如下所示:

@Repository
public interface StateRepository extends FirestoreReactiveRepository<State> {
}
@RestController
@RequestMapping("/states")
@Slf4j
@RequiredArgsConstructor
public class StateController {

    private final StateRepository stateRepository;

    @GetMapping
    private Flux<State> getAllStates() {
        return stateRepository.findAll();
    }
}

当我使用getAllStates()请求所有状态时,我得到一个 null listings字段,而所有其他字段都按预期进行了初始化。 我怎样才能实现所需的功能?

@Edit:如果有直接访问子集合的方法,也欢迎!

看起来它不起作用,因为您在实体 class 中使用了 Flux 类型的字段。

Flux<Listing> listings;

但该项目目前不支持该类型的collections。 尝试使用List<Listing>代替。

编辑:

您的实体 class 应如下所示:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collectionName = "states")
public class State {
    
    @DocumentId
    String name;
    
    int num_of_listings;

    List<Listing> listings;
    
}

试试@DBRef(db="listings")

 @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Document(collectionName = "states")
    public class State {

        @DocumentId
        String name;

        int num_of_listings;
        @DBRef(db="listings")
        Flux<Listing> listings;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM