mongodb树形结构表文件夹下空间大小的统计

QQ274751775 2017-03-14 04:44:01


{
"_id" : ObjectId("58c793d279cec68b042d1d93"),
"fullName" : "文件名a",
"isFolder" : 1
}

{
"_id" : ObjectId("58c793d279cec68b042d1d94"),
"fullName" : "文件111.txt",
"parentId" : "58c793d279cec68b042d1d93",
"isFolder" : -1,
"dfsSize" : NumberLong(1024),
"ancestors" : [
"58c793d279cec68b042d1d93"
]
}


{
"_id" : ObjectId("58c793d279cec68b042d1d95"),
"fullName" : "文件222.txt",
"parentId" : "58c793d279cec68b042d1d93",
"isFolder" : -1,
"dfsSize" : NumberLong(256),
"ancestors" : [
"58c793d279cec68b042d1d93"
]
}

{
"_id" : ObjectId("58c793d279cec68b042d1d96"),
"fullName" : "文件夹b",
"parentId" : "58c793d279cec68b042d1d93",
"isFolder" : 1,
"ancestors" : [
"58c793d279cec68b042d1d93"
]
}

{
"_id" : ObjectId("58c793d279cec68b042d1d97"),
"fullName" : "文件夹bb",
"parentId" : "58c793d279cec68b042d1d96",
"isFolder" : 1,
"ancestors" : [
"58c793d279cec68b042d1d93",
"58c793d279cec68b042d1d96"
]
}

{
"_id" : ObjectId("58c793d279cec68b042d1d98"),
"fullName" : "文件哈哈.rar",
"parentId" : "58c793d279cec68b042d1d97",
"isFolder" : -1,
"dfsSize" : NumberLong(1024),
"ancestors" : [
"58c793d279cec68b042d1d93",
"58c793d279cec68b042d1d96",
"58c793d279cec68b042d1d97"
]
}

isFolder 1是文件夹,-1是文件
dfsSize 是文件的大小
1.求大神:
1.怎么获得文件夹下所有文件的大小或者制定id文件下的大小。求脚本
...全文
399 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ274751775 2017-03-16
  • 打赏
  • 举报
回复
可以了,暂时这里处理 java代码:

       @Override
	public Map<String, Long> getFolderSizeMap(List<String> folderIdList) {
		
		//祖先查询
		Criteria ancestorsCriteria = Criteria.where("ancestors").in(folderIdList);
		//值查询文件
		Criteria isNotFolderCriteria = Criteria.where("isFolder").in(NdFileContant.FILE_FOLDER_NOT);
		//and查询
		Criteria where = getAndCriteria(ancestorsCriteria,isNotFolderCriteria);
		
		Aggregation aggregation = Aggregation.newAggregation(
				Aggregation.match(where),//unwind前条件查询
				Aggregation.unwind("ancestors"),
				Aggregation.match(where),//unwind后条件查询(这步相当于具体查询了)
				Aggregation.group("ancestors").sum("dfsSize").as("total") //分组统计总和
				);
		AggregationResults<BasicDBObject> results = this.mongoTemplate.aggregate(aggregation, this.actualClazz, BasicDBObject.class);
		Map<String, Long> map = new HashMap<String, Long>();
		for (BasicDBObject basicDBObject : results) {
			map.put(basicDBObject.getString("_id"), basicDBObject.getLong("total"));
		}
		return map;
	}

脚本类似于:

db.getCollection('ndFile').aggregate([
    {$match:{ancestors:'58c8ac0079cec6c71cf4c8fe'}},
    {$unwind:'$ancestors'},
    {$match:{ancestors:'58c8ac0079cec6c71cf4c8fe'}},
    {$group:{_id:'ancestors',total:{$sum:'$dfsSize'}}},
    ])

1,798

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧