как использовать сокращение с запросом при сканировании Dynamodb - PullRequest
2 голосов
/ 26 мая 2020

Я изучаю DynamoDB и не понимаю, где выполнить сокращение данных после того, как запрос DynamoDB предоставил результаты, а где в коде - go.

Хочу подвести итог running_time_secs.

async function scanForResults () {
    try {
        var params = {
            TableName: "Movies",
            ProjectionExpression: "#yr, title, info.rating, info.running_time_secs, info.genres",
            FilterExpression: "#yr between :start_yr and :end_yr",
            ExpressionAttributeNames: {
                "#yr": "year",
            },
            ExpressionAttributeValues: {
                ":start_yr": 1950,
                ":end_yr": 1985,
            }
        };

        var result = await docClient.scan(params).promise()

        console.log(JSON.stringify(result))

        //const total = result.reduce((sum, result) => sum + result.info.running_time_secs, 0);

    } catch (error) {
        console.error(error);
    }
}

scanForResults();

Спасибо за любую помощь.

1 Ответ

1 голос
/ 26 мая 2020

ИЗМЕНИТЬ

Возможно, вы сможете опубликовать фактическое значение результата, как только решите его. Было бы лучше знать реальную структуру значения результата, чтобы лучше понять, как к нему подойти. Вы можете найти документацию для получения дополнительной информации. Это действительно очень полезно.

var result = [{
  "title": "Piranha",
  "year": 1978,
  "info": {
    "rating": 5.8,
    "genres": ["Comedy", "Horror", "Sci-Fi"],
    "running_time_secs": 5640
  }
}]

var total = result.reduce((sum, result) => sum + result.info.running_time_secs, 0);

console.log(total);

var result2 = [{
    "title": "Piranha",
    "year": 1978,
    "info": {
      "rating": 5.8,
      "genres": ["Comedy", "Horror", "Sci-Fi"],
      "running_time_secs": 5640
    }
  },
  {
    "title": "Piranha2",
    "year": 1980,
    "info": {
      "rating": 5.8,
      "genres": ["Comedy", "Horror", "Sci-Fi"],
      "running_time_secs": 5640
    }
  }
]

var total2 = result2.reduce((sum, result) => sum + result.info.running_time_secs, 0);

console.log(total2);

var resultObj = {
  "title": "Piranha",
  "year": 1978,
  "info": {
    "rating": 5.8,
    "genres": ["Comedy", "Horror", "Sci-Fi"],
    "running_time_secs": 5640
  }
}

var totalObj = resultObj.reduce((sum, result) => sum + result.info.running_time_secs, 0);

console.log(totalObj);

Я думаю, что на основе полученной вами ошибки результат может быть не массивом. Вы можете обратиться к опубликованному мной фрагменту кода. Я использовал ваш код и просто создал массив результатов для mimi c результата, который вы получаете от функции сканирования. Как вы можете видеть на третьей функции уменьшения, используемой в resultObj, я получил ошибку ответа, которую вы получили. reduce - это метод массива, и его использование для объекта приведет к такой ошибке, поскольку объект не реализует этот метод. Следовательно, я думаю, что результат, который вы получаете, не является массивом.

...