springboot集成mongdb,数据以多级文件夹形式存放,perant为父文件夹,根目录的perant为null,查询出所有文件夹的id,name,和他们的子文件夹id,nanme,树形结构
时间: 2023-07-16 16:15:05 浏览: 73
首先,需要定义一个 MongoDB 的实体类,包含文件夹的 id、name、parent 和 children 属性:
```java
@Document(collection = "folders")
public class Folder {
@Id
private String id;
private String name;
private String parent;
private List<Folder> children;
// getter and setter
}
```
然后,定义一个 MongoDB 的 Repository 接口:
```java
@Repository
public interface FolderRepository extends MongoRepository<Folder, String> {
List<Folder> findByParent(String parentId);
}
```
接着,在 Service 层中编写查询逻辑,使用递归的方式遍历所有文件夹及其子文件夹:
```java
@Service
public class FolderService {
@Autowired
private FolderRepository folderRepository;
public List<Map<String, Object>> getAllFolders() {
List<Map<String, Object>> result = new ArrayList<>();
List<Folder> rootFolders = folderRepository.findByParent(null);
for (Folder rootFolder : rootFolders) {
Map<String, Object> folderMap = new HashMap<>();
folderMap.put("id", rootFolder.getId());
folderMap.put("name", rootFolder.getName());
folderMap.put("children", getChildrenFolders(rootFolder));
result.add(folderMap);
}
return result;
}
private List<Map<String, Object>> getChildrenFolders(Folder folder) {
List<Map<String, Object>> children = new ArrayList<>();
List<Folder> childFolders = folderRepository.findByParent(folder.getId());
for (Folder childFolder : childFolders) {
Map<String, Object> folderMap = new HashMap<>();
folderMap.put("id", childFolder.getId());
folderMap.put("name", childFolder.getName());
folderMap.put("children", getChildrenFolders(childFolder));
children.add(folderMap);
}
return children;
}
}
```
最后,在 Controller 层将查询结果返回给前端:
```java
@RestController
@RequestMapping("/folders")
public class FolderController {
@Autowired
private FolderService folderService;
@GetMapping
public List<Map<String, Object>> getAllFolders() {
return folderService.getAllFolders();
}
}
```
这样就可以返回所有文件夹的 id、name 和子文件夹的 id、name,以树形结构展示。