标签: aggregate

MongoDB 聚合:将数组属性展平为根数组

我正在开发一个使用 递归查找评论线程的功能$graphLookUp,我几乎已经拥有它了。(虽然方式有点复杂,但它正在起作用!)

我需要的最后一步如下: 不要将嵌套posteriorThread作为根数组()的属性$$ROOT,而是将其合并到根本身。

  • 聚合代码:
const posteriorThread = await Comment.aggregate([
  {
    $match: {
      _id: post.threadDescendant
    }
  },

  {
    $graphLookup: {
      from: 'baseposts',
      startWith: '$threadDescendant',
      connectFromField: 'threadDescendant',
      connectToField: '_id',
      as: 'posteriorThread'
    }
  },

  {
    $unwind: '$posteriorThread'
  },

  {
    $sort: { 'posteriorThread.depth': 1 }
  },

  {
    $group: {
      _id: '$_id',
      posteriorThread: { $push: '$posteriorThread' },
      root: { $first: '$$ROOT' }
    }
  },

  {
    $project: {
      'root.posteriorThread': 0
    }
  },

  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [ …
Run Code Online (Sandbox Code Playgroud)

javascript aggregate mongoose mongodb

3
推荐指数
1
解决办法
1051
查看次数

我们可以在 pandas groupby agg 函数中使用 iterables 吗?

我有一个 pandas groupby 功能。我有另一个 dict 形式的输入,其具有 {column:aggfunc} 结构,如下所示:

d = {'production': 'sum',
     'Demand': 'first'}
Run Code Online (Sandbox Code Playgroud)

我想使用这个字典来应用aggregate函数,如下所示:

df.groupby(['Month']).agg(production=pd.NamedAgg('production', aggfunc='sum'),
                          demand=pd.NamedAgg('Demand', aggfunc='first'))
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用输入字典来实现此目的d(可能通过使用字典理解)?

python aggregate pandas pandas-groupby

3
推荐指数
1
解决办法
142
查看次数

使用管道进行聚合查找并匹配不工作 mongodb

我有这两个简单的集合:

项目:

{
    "id" : "111",
    "name" : "apple",
    "status" : "active"
}    
{
    "id" : "222",
    "name" : "banana",
    "status" : "active"
}
Run Code Online (Sandbox Code Playgroud)

存货:

{
    "item_id" : "111",
    "qty" : 3,
    "branch" : "main"
}
{
    "item_id" : "222",
    "qty" : 3
}
Run Code Online (Sandbox Code Playgroud)

现在我只想返回库存集合中存在且等于“main”且具有“status”==“active”和“branch”的项目。我有下面的代码,但它返回所有文档,第二个文档有一个空的“info”数组。

db.getCollection('items')
.aggregate([
  {$match:{$and:[
                {"status":'active'},
                {"name":{$exists:true}}
            ]
}},
{$lookup:{
    as:"info",
    from:"inventory",
    let:{fruitId:"$id"},
    pipeline:[
     {$match:{
         $and:[
            {$expr:{$eq:["$item_id","$$fruitId"]}},
            {"branch":{$eq:"main"}},
            {"branch":{$exists:true}}
         ]         
         }    
     }
    ]    
}}
])
Run Code Online (Sandbox Code Playgroud)

谁能给我一个关于如何解决这个问题的想法?

pipeline aggregate mongodb

3
推荐指数
1
解决办法
7680
查看次数

MongoDB - 将 $addToSet 与条件一起使用

在组聚合中,如果年龄为 20,我只是尝试将名称添加到集合中:

假设我有以下两个文档:

_id: ...
timestamp: ...
name: Max
age: 20


_id: ...
timestamp: ...
name: Brian
age: 21
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试将这些进行分组,并$group尝试将所有 20 岁的人的名字添加到一个集合中:

{
  $group: {
    _id: {
      bins: {
        $dateTrunc: {
          date: '$timestamp',
          unit: 'week',
          binSize: 1
        }
      }
    },
    'NamesWithAge20': {
      $addToSet: '$name'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我只对“NamesWithAge20”集感兴趣。在这段代码中,现在 Max 和 Brian 都被添加到集合中,但我想引入一个条件,仅在年龄为 20 岁时添加名字。在这个阶段可以吗?

aggregate set mongodb aggregation-framework

3
推荐指数
1
解决办法
3723
查看次数

根据另一个数据帧的两个日期汇总行值

这是我的数据:

df1 <- fread('
   id ,      date1 ,    date2     
  id_0001 , 2017-01-01, 2017-01-05
  id_0002 , 2017-01-02, 2017-01-08
  id_0003 , 2017-01-04, 2017-01-07
 ')


df2<- fread('
        date ,     value     
        2017-01-01,   1
        2017-01-02,   2
        2017-01-03,   5
        2017-01-04,   5
        2017-01-05,   5 
        2017-01-06,   3
        2017-01-07,   4
        2017-01-08,   7
        2017-01-09,   5
        2017-01-10,   1
        2017-01-11,   5 
 ')

Run Code Online (Sandbox Code Playgroud)

我想总结(获取平均值)每个from在 rowwise和之间的范围内的valuefrom 。df2iddf1date1date2

结果是这样的:

ID 日期1 日期2 价值
id_0001 2017-01-01 2017-01-05 mean(c(1,2,5,5,5))
id_0002 2017-01-02 2017-01-08 mean(c(2,5,5,5,3,4,7))
id_0003 2017-01-04 2017-01-07 mean(c(5,5,3,4))

我知道我可以扩展idby …

merge aggregate r data.table

3
推荐指数
1
解决办法
118
查看次数

如何对列表元素进行“分组”(在 Base R 中)

代码

list(c(1,2), c('a', 'b'), c('a', 'b'), c(2,3)) -> li
## 
## [[1]]
## [1] 1 2
## 
## [[2]]
## [1] "a" "b"
## 
## [[3]]
## [1] "a" "b"
## 
## [[4]]
## [1] 2 3
Run Code Online (Sandbox Code Playgroud)

问:所需的输出来自 table()。

Factor     c(1,2) c('a', 'b') c(2,3)
Freq           1        2        1 
Run Code Online (Sandbox Code Playgroud)

它看起来很简单,但我找不到解决方案。

编辑- 不幸的是,我的列表包含大约 500,000 个元素。抱歉没有提到这一点。解决方案可能是将列表中的项目合并为单个元素:

## 
## [[1]]
## [1] "1 2"
## 
## [[2]]
## [1] "a b"
## 
## [[3]]
## [1] "a b"
## 
## [[4]]
## [1] …
Run Code Online (Sandbox Code Playgroud)

aggregate r list

3
推荐指数
1
解决办法
75
查看次数

Linq - 如何聚合另一个查询的结果

我想在列表中获取where子句的结果,然后获取该结果集并创建一个新类型,其所有字段都是从原始查询的聚合构造的.所以给定下面的基本示例,无论如何将两个linq语句合并为一个?如果原始的地方没有行,那么它应该返回null.谢谢!

    class Foo
    {
        public int A { get; set; }
        public int B { get; set; }
    }
    List<Foo> lst = GetFooList();

        var q = (from f in lst
                 where f.A > 3
                 select f).ToList();
        if (q.Count != 0)
        {
            var qq = new
            {
                MinA = q.Min(l => l.A),
                MaxB = q.Max(h => h.B),
            };
            // now do something with qq
        }
Run Code Online (Sandbox Code Playgroud)

更新:对于我的情况,原始集合有很多项目,但在where子句之后,结果集非常小.多次枚举第二组应该不是问题.此外,我需要在集合上使用first和last来从这些记录中获取值.答案小组最适合我.聚合方式非常有趣,我认为还有其他用途.

c# linq aggregate

2
推荐指数
1
解决办法
1507
查看次数

使用SQL进行压缩查询

我有一张桌子,里面有我想要的4件事......名称,价格,数量,以及具体的日期

每个日期有很多条目:

Name          Price  Date

Twin Private  $25    06/02/09
Double        $35    06/02/09
Single        $20    06/02/09
Twin Private  $25    06/03/09
Double        $35    06/03/09
Single        $20    06/03/09
Twin Private  $25    06/04/09
Double        $35    06/04/09
Single        $20    06/04/09
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它压缩成:

Name          Price_06/02/09  Price_06/03/09  Price_06/04/09

Twin Private  $25             $25             $30
Double        $35             $35             $50
Single        $20             $20             $40
Run Code Online (Sandbox Code Playgroud)

mysql sql group-by aggregate sql-order-by

2
推荐指数
1
解决办法
200
查看次数

R在大量列上聚合而不指定列名

我无法使用此处的搜索功能或Google上的问题找到问题的答案.

我有一个数据框(500列宽,200,000行长),每人多行.每个单元格(除了具有人员ID的第一列)包含0或1.我正在寻找一种方法将每个人的数据帧减少到1行,其中我按人数取每列的最大值.

我知道我可以使用ddply或data.table ......如下所示......

tt <-data.frame(person=c(1,1,1,2,2,2,3,3,3), col1=c(0,0,1,1,1,0,0,0,0),col2=c(1, 1, 0, 0, 0, 0, 1 ,0 ,1))

library(plyr)
ddply(tt, .(person), summarize, col1=max(col1), col2=max(col2))

  person col1 col2
      1    1    1
      2    1    0
      3    0    1
Run Code Online (Sandbox Code Playgroud)

但我不想指定我的每个列名,因为1)我有500和2)在新数据集上它们可能不同.

aggregate r dataframe

2
推荐指数
1
解决办法
655
查看次数

如何根据每个ID汇总R中的表

所以我有一个像这样的结构表

id   V1    V2
101, 500,   1
101, 600,   1
102, 300,   0
102, 300,   0
102, 400,   0
102, 100,   1
103, 200,   0
103, 400,   0
104, 200,   1
Run Code Online (Sandbox Code Playgroud)

基本上对于每个id,我想计算V1的平均值和V2的总和,所以新表应该是这样的

id   V1    V2
101, 550,  2
102, 275,  1
103, 400,  0
104, 200,  1
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮忙,我真的很感激.

aggregate r

2
推荐指数
1
解决办法
113
查看次数