MongoDB聚合中如何将展开文档重组为原嵌套结构?
MongoDB C#聚合操作中还原嵌套结构
定义的嵌套类
private sealed class IIn { public String iKey; public String fi1; public String fi2; public List<M> ms; public sealed class M { public String mKey; public String fm1; public String fm2; public List<S> ss; public sealed class S { public String fs1; public String fs2; public String fs3; } } }
当前执行的聚合操作
该类对应的文档存储在MongoDB Atlas中,我使用MongoDB Driver的C# LINQ实现了如下聚合操作:
var testItems = testCollection .Aggregate() .Match(x => x.iKey.Equals("i1")) .Unwind(x => x.ms) .Unwind(x => x["ms"]["ss"]) .Match(x => x["ms"]["ss"]["fs1"].Equals("fs1111")) .Project( x => new { iKey = x["iKey"], mKey = x["ms"]["mKey"], fs1 = x["ms"]["ss"]["fs1"], fs3 = x["ms"]["ss"]["fs3"] }) .Match(x => x.fs3.Equals("fs3111")) .Group() .ToList();
需求与疑问
通过上述操作完成文档筛选、嵌套集合展开、字段选择和目标数据保留后,我希望将这些展开后的文档重新分组回原来的嵌套结构(剔除无用字段),想问在聚合操作中是否可以实现这样的Group方法?
我曾实现过一层嵌套的分组:
.Group( x => x.iKey, x => new { iKey = x.Key, ms = x.Select( y => new { mKey = y.mKey, fs1 = y.fs1, fs3 = y.fs3 }) })
补充尝试
我试过使用AsQueryable,但无法通过SelectMany传递iKey和mKey。
最终解决方案
直接使用以下代码即可实现需求,无需使用Unwind/Group或SelectMany/GroupBy:
Select(x=>new{iKey,ms=x.ms.Select(y=>new{y.mKey,ss=y.ss.Select(z=>new{z.fs1,z.fs3})})})
内容的提问来源于stack exchange,提问作者Tord
相关产品推荐
相关产品推荐

