首页 > 解决方案 > 传递一个值来访问对象 - Mongodb

问题描述

在 $group 完成后,我在 $_id 中有一个数字。

但是,我需要这个值来访问一个对象并返回你的字符串。

const week = {
  1: 'Domingo',
  2: 'Segunda',
  3: 'Terça',
  4: 'Quarta',
  5: 'Quinta',
  6: 'Sexta',
  7: 'Sábado',
}

db.trips.aggregate(
  [
    {
      $group: {
        _id: {
          $dayOfWeek: "$startTime"
        },
        qtd: {
          $sum: 1
        }
      }
    },
    
    {
      $project: {
        diaDaSemana: week["$_id"],
        total: "$qtd",
      }
    }
  ]
);

我尝试了很多次,但没有奏效。

感谢帮助。

标签: javascriptmongodb

解决方案


聚合管道不像 javascript 那样取消引用对象。

如果您将天数作为数组传递,则在$project阶段中,您可以使用$arrayElemAt来获取相应的字符串。

您将需要第零个元素来偏移索引,以便“Domingo”位于索引 1:

const week = [
  'Nada',
  'Domingo',
  'Segunda',
  'Terça',
  'Quarta',
  'Quinta',
  'Sexta',
  'Sábado',
]

然后在$project阶段:

    diaDaSemana: {$arrayElemAt: [week, "$_id"]},

推荐阅读