当前位置: 首页 > 编程语言 > C#

DocumentDB中按字段分组Share

时间:2023-04-10 20:59:38 C#

DocumentDB中按字段分组是否有可能以某种方式对DocumentDB中的字段进行分组,存储过程与否?假设我有以下集合:[{name:"ItemA",priority:1},{name:"ItemB",priority:2},{name:"ItemC",priority:2},{name:"ItemD",priority:1}]我想获得最高优先级组中的所有项目(在本例中为优先级2)。我不知道什么值是最优选的。即:[{name:"ItemB",priority:2},{name:"ItemC",priority:2}]使用一些粗略的LINQ,它看起来像这样:varhighestPriority=collection.GroupBy(x=>x.Priority).OrderByDescending(x=>x.Key).First();DocumentDB当前不支持GROUPBY或任何其他聚合。这是第二个最需要的功能,在DocumentDBUserVoice上列为“正在审查”。同时,documentdb-lumenize是一个以存储过程的形式编写的DocumentDB聚合库。您将cube.string作为存储过程加载,然后使用聚合配置调用它。这个例子有点矫枉过正,但它完全有能力做你在这里问的事情。如果将其传递给存储过程:{cubeConfig:{groupBy:"name",field:"priority",f:"max"}}应该做你想做的。请注意,Lumenize可以做很多事情,包括简单的分组依据和其他函数(求和、计数、最小值、最大值、中值、p75等)、数据透视表,以及每个单元具有多个单元的复杂n维超立方体细胞指标。我从未尝试过从.NET加载cube.string,因为我们使用的是node.js,但它作为字符串而不是javascript提供,因此您可以轻松加载和发送它。或者,您可以编写一个存储过程来执行这个简单的聚合。DocumentDB中仍然不支持GroupBy,最好的方法是上面介绍的(使用存储过程),或者使用上面提到的UserVoice项中的Spark连接器。但是,如果要分组的集合比较小,还有一种方案:从集合中取出所有不分组的结果,在内存中进行分组。因此,而不是:varhighestPriority=collection.GroupBy(x=>x.Priority).OrderByDescending(x=>x.Key).First();你使用:varhighestPriority=collection.Where().AsEnumerable()。GroupBy(x=>x.Priority).OrderByDescending(x=>x.Key).First();.AsEnumerable()从documentDB获取结果,然后在内存中执行groupBy。但是请注意,这不是最佳解决方案,只有在您确定结果集很小的情况下才应使用。以上就是C#学习教程:所有内容按照DocumentDB中的字段进行分组分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: