为什么我不能在我的开关盒中使用我的投影场?

时间:2021-01-01 16:28:30

标签: database mongodb switch-statement pipeline aggregation

我试图通过对月份进行案例来将名为“摘要”的时区字段应用于我的文档,为什么我不能在切换案例中使用“月份”投影字段?

 db.steps.aggregate( [
      {
        $project:
          {
            patientName : 1,
            month: {$month: '$dateTime'},
            hour: {$hour: '$dateTime'},
            minute: {$minute: '$dateTime'},
            day: {$dayOfMonth: '$dateTime'},
            "summary" :
            {
              $switch:
                {
                  branches: [
                    {
                      case: { $eq : [ '$month', 6 ] },
                      then: "month 6"
                    },
                    {
                      case: { $eq : [ '$month', 7 ] },
                      then: "month 7"
                    }
                  ],
                  default: "No value found."
                }
             }
          }
       },
       { $group: { _id: {"day":"$day", "month":"$month", "summary":"$summary"}}}
    ]);

它没有得到正确的,而是使用默认值:

{ "_id" : { "day" : 24, "month" : 9, "summary" : "No value found." } }
{ "_id" : { "day" : 29, "month" : 9, "summary" : "No value found." } }
{ "_id" : { "day" : 22, "month" : 6, "summary" : "No value found." } }
{ "_id" : { "day" : 19, "month" : 7, "summary" : "No value found." } }
{ "_id" : { "day" : 6, "month" : 8, "summary" : "No value found." } }
{ "_id" : { "day" : 2, "month" : 9, "summary" : "No value found." } }
{ "_id" : { "day" : 24, "month" : 7, "summary" : "No value found." } }
{ "_id" : { "day" : 6, "month" : 9, "summary" : "No value found." } }
{ "_id" : { "day" : 31, "month" : 7, "summary" : "No value found." } }
{ "_id" : { "day" : 10, "month" : 9, "summary" : "No value found." } }
{ "_id" : { "day" : 12, "month" : 9, "summary" : "No value found." } }
{ "_id" : { "day" : 22, "month" : 9, "summary" : "No value found." } }
{ "_id" : { "day" : 13, "month" : 9, "summary" : "No value found." } }

不能在同一个舞台上使用a投影场吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您无权访问同一阶段内的字段。以下是两种可能的解决方案:

db.steps.aggregate( [
      {
        $project:
          {
            patientName : 1,
            month: {$month: '$dateTime'},
            hour: {$hour: '$dateTime'},
            minute: {$minute: '$dateTime'},
            day: {$dayOfMonth: '$dateTime'},
            "summary" :
            {
              $switch:
                {
                  branches: [
                    {
                      case: { $eq : [ {$month: '$dateTime'}, 6 ] },
                      then: "month 6"
                    },
                    {
                      case: { $eq : [ {$month: '$dateTime'}, 7 ] },
                      then: "month 7"
                    }
                  ],
                  default: "No value found."
                }
             }
          }
       },
       { $group: { _id: {"day":"$day", "month":"$month", "summary":"$summary"}}}
    ]);



db.steps.aggregate( [
      {
        $project:
          {
            patientName : 1,
            month: {$month: '$dateTime'},
            hour: {$hour: '$dateTime'},
            minute: {$minute: '$dateTime'},
            day: {$dayOfMonth: '$dateTime'}
          }
       },
      {
        $set: // $project would remove all others
          {
            "summary" :
            {
              $switch:
                {
                  branches: [
                    {
                      case: { $eq : [ '$month', 6 ] },
                      then: "month 6"
                    },
                    {
                      case: { $eq : [ '$month', 7 ] },
                      then: "month 7"
                    }
                  ],
                  default: "No value found."
                }
             }
          }
       },
       { $group: { _id: {"day":"$day", "month":"$month", "summary":"$summary"}}}
    ]);

注意,我更喜欢

{ $cond: 
   { 
      if: {$in: ['$month', [6,7]]}, 
      then: { $concat: [ "month ", '$month' ] }, 
      else: "No value found."
   } 
}
相关问题