【问题标题】:Results group cond mongodb push array结果组 cond mongodb push array
【发布时间】:2019-06-14 00:17:36
【问题描述】:

我想在实习后达到这个结果:

dataset: [
 {
  seriesname: "GROUP 1",
   data: [
    {
     stage: 'START'
     value: 3
    },
    {
     stage: 'END'
     value: 4
    }
   ]
 },
 {
  seriesname: "GROUP 2",
  data: [
   {
    stage: 'START'
    value: 3
   },
   {
    stage: 'END'
    value: 1
   }
  ]
 }
]

但是我不能同时执行 condpush 以获得多个同时结果

{ $unwind: '$name' },
  { $group: {
    _id: '$name.name',
    data: { $push: {
      $first: {
        'value': { $sum: {
          $cond: [
            { $and: [
              { $eq: ['$stage', 'START'] },
              { $gte: ['$dStart', new Date(dStart)] },
              { $lte: ['$dEnd', new Date(dEnd)] }
            ] }, parseInt(1), parseInt(0)] } },
        'stage': 'START'
      },
      $first: {
        'value': { $sum: {
          $cond: [
            { $and: [
              { $eq: ['$two', 'END'] },
              { $gte: ['$dStart', new Date(dStart)] },
              { $lte: ['$dEnd', new Date(dEnd)] }
            ] }, parseInt(1), parseInt(0)] } },
        'stage': 'END'
      }
    }}
  } }

我怎样才能正确地完成所有这些阶段?

  • 我查看了其他一些帖子,但没有发现任何与 cond 和 push 创建数组一起使用的帖子

【问题讨论】:

  • 如果您也发布一些示例数据会很有帮助...不仅仅是代码和所需的结果。另外,将mongoplayground.net 视为答案模板。
  • 基本上是这样的,但日期是数组,包含多个对象和多个查询mongoplayground.net/p/OjmSixJBfTG

标签: mongodb aggregation-framework


【解决方案1】:

将其分为两个阶段,首先分组并计算每个值,然后根据需要重组数据,如下所示:

{
  $group: {
      _id: "$name.name",
      start: { 
        $sum: {
          $cond: [
            { $and: [
              { $eq: ['$stage', 'START'] },
              { $gte: ['$dStart', date_param_1] },
              { $lte: ['$dEnd', date_param_2] }
            ] }, 1, 0] 
        }
     },
     end: { 
        $sum: {
          $cond: [
            { $and: [
              { $eq: ['$two', 'END'] },
              { $gte: ['$dStart', date_param_1] },
              { $lte: ['$dEnd', date_param_2] }
            ] }, 1, 0] 
        }
     }
  }
},
{
  $addFields: {
     data: [{value: "$start", stage: "START}, {value: "$end, stage: "END"}]
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-30
    • 2016-09-22
    • 2022-12-12
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2019-09-19
    • 2014-07-19
    相关资源
    最近更新 更多