查询菜单下面所有得子菜单,并更新数据
首先我们得数据库是mongodb,数据结构是子菜单和菜单属于同级别得关系,而且子菜单下面还会有子菜单,因为涉及到修改数据,所以选择通过一次将所有得数据全不查询出来然后进行更新数据,内容涉及到递归
public async Task MarkArchive(long row_id) { //通过传入得Id来查询所有父id为当前id得数据,然后通过递归遍历这些数据,来查询他们下面得子菜单, var list = _findallchildren(row_id); //要修改的字段 var ids = list.Select(x => x.RecordId).ToList();
//最后这里其实只查到了菜单下面得所有子菜单及子子菜单,这里将菜单本身也添加进去,进行修改 ids.Add(row_id); var filter = Builders<AppTaskEntity>.Filter.Where(x => ids.Contains(x.RecordId)); var update_filter = Builders<AppTaskEntity>.Update.Set(x => x.IsArchive, true); await this.GetCollection().UpdateManyAsync(filter, update_filter); List<AppTaskEntity> _findallchildren(long row_id) { var filter = Builders<AppTaskEntity>.Filter.Eq(s => s.ParentId, row_id); var list = this.GetCollection().FindList(filter);
//这里添加一个中间变量来进行遍历 List<AppTaskEntity> tmpList = new(list); foreach (AppTaskEntity single in tmpList) { List<AppTaskEntity> tmpChildren = _findallchildren(single.RecordId); if (tmpChildren.Any()) { list.AddRange(tmpChildren); } } return list; } }

浙公网安备 33010602011771号