2017-06-23 112 views
0

我有一个字段名为level的字段值为0到3的用户集合。我试图用用户级别的文本表示返回生成的字段。到目前为止,我有这个,但它取代了level字段。

{ $project: { 
       '_id': 1, 
       'name': 1, 
       'email': 1, 
       'username': 1, 
       'password': 1, 
       'registered': 1, 
       'level': { 
          $switch: { 
             branches: [ 
              { case: 0, then: 'Pending' }, 
              { case: 1, then: 'Regular' }, 
              { case: 2, then: 'User manager' }, 
              { case: 3, then: 'Administrator' } 
             ], 
             default: 'Unknown' 
            } 
       }, 

      } 

我想在我的聚合输出中有一个名为levelName的字段。我该怎么做呢?我试过这个:

'levelName': { 
      $switch: { 
         branches: [ 
          { case: { level: 0 }, then: 'Pending' }, 
          { case: { level: 1 }, then: 'Regular' }, 
          { case: { level: 2 }, then: 'User manager' }, 
          { case: { level: 3 }, then: 'Administrator' } 
         ], 
         default: 'Unknown' 
        } 
}, 

但无济于事。

+1

使用'平等$ eq'运营商表达比较。就像'{case:{“$ eq”:[“$ level”,0]},然后:'Pending'} ..' – Veeram

+0

问题是,不清楚你在问什么而不显示文档和预期的结果。你确实需要一个“场比较”来返回任何东西,你似乎认为操作员正在比较你投射的同名字段,但事实并非如此。操作员只是一般的,需要被告知要比较什么作为输入。 –

+0

是的!就是这样。谢谢Veeram! –

回答

1

在投影中,您可以轻松更改字段名称。例如,在您的数据中,如果要将level字段的名称更改为levelName,则只需在字段中写入新名称并使用$fieldName指定旧fieldName的值即可。现在

{ 
    $project: { 
     levelName: "$level" //new name is levelName, and is assigned value of original field name level. 
    } 
} 

,你的情况,你可以通过上述方式实现这一目标,但是,你的$switch声明是无效的,或者你在错误的方式使用$switch。您需要指定哪个字段在case expression{ case: {$eq:["$level", 0]}, then: 'Pending' }代替{ case: 0, then: 'Pending' }.

db.indexName.aggregate([ 
{ 
    $project: 
    { 
     '_id': 1, 
     'name': 1, 
     'email': 1, 
     'username': 1, 
     'password': 1, 
     'registered': 1, 
     levelName: { 
      $switch: { 
       branches: [ 
        { case: {$eq:["$level", 0]}, then: 'Pending' }, 
        { case: {$eq:["$level", 1]}, then: 'Regular' }, 
        { case: {$eq:["$level", 2]}, then: 'User manager' }, 
        { case: {$eq:["$level", 3]}, then: 'Administrator' } 
       ], 
       default: 'Unknown' 
      } 
     } 
    } 
} 
]) 
相关问题