首页 > 解决方案 > 查询 dynamoDb 表

问题描述

我正在尝试获取满足我已经定义的过滤器的数据库的所有记录。问题是我必须根据组织的数量重复 N 次。有没有办法让它为每个组织迭代?我尝试将 organization_code 放入一个数组中,但未能说明架构不正确。请帮忙

const AWS = require('aws-sdk')
AWS.config.update({ region: 'us-east-2' })
const dDBClient = new AWS.DynamoDB.DocumentClient();
const async = require('async')
let scanComplete = false


let beginDate = "2020-12-16 00:00:00.000"
let endDate = "2020-12-23 00:00:00.000"
const organization_code = "CLPIT01DB" < - HERE ARE JUST 1 ORG, NEED 6 of them!

const params = {
    ExpressionAttributeValues: {
        ':organization_code': organization_code,
        ':BeginDate': beginDate,
        ':EndDate': endDate
    },
    KeyConditionExpression: 'organization_code = :organization_code',
    ProjectionExpression: `booking_id,booking_payment_ids,booking_pnr,company_address,company_city,company_comuna,company_girototal_amount_clp,total_amount_exe,total_amount_vat,vat`,
    FilterExpression: 'payment_createdutc >= :BeginDate and payment_createdutc < :EndDate',
    TableName: 'TemporaryPayments'
}

restOfTheCode TableConfiguration

非常感谢!

标签: node.jsamazon-web-servicesaws-lambdaamazon-dynamodbdynamodb-queries

解决方案


你可以试试这个:

const AWS = require('aws-sdk')
AWS.config.update({ region: 'us-east-2' })
const dDBClient = new AWS.DynamoDB.DocumentClient();

let beginDate = "2020-12-16 00:00:00.000"
let endDate = "2020-12-23 00:00:00.000"
let arrayData = []; // init list of query data

// Initiate the params
let params = {
    ExpressionAttributeValues: {
      ':BeginDate': beginDate,
      ':EndDate': endDate
    },
    KeyConditionExpression: 'organization_code = :organization_code',
    ProjectionExpression: `booking_id,booking_payment_ids,booking_pnr,company_address,company_city,company_comuna,company_girototal_amount_clp,total_amount_exe,total_amount_vat,vat`,
    FilterExpression: 'payment_createdutc >= :BeginDate and payment_createdutc < :EndDate',
    TableName: 'TemporaryPayments'
}

async function db_query(org_code) {
  params.ExpressionAttributeValues = {
    ...params.ExpressionAttributeValues,
    {
      ':organization_code': org_code
    }
  }
  let res = await dDBClient.query(params).promise();
  arrayData = [
    ...arrayData,
    res.Items
  ]
  if (res.LastEvaluatedKey) {
    params.ExclusiveStartKey = res.LastEvaluatedKey;
    return db_query(org_code);
  }
  console.log(org_code+" data length : "+arrayData.length)
  arrayData = [];
}

db_query("CLPIT01DB")

您可以通过执行以下操作迭代组织查询:

const org_codes = ["CLPIT01DB", "xxxxxxxxx", etc];
let org_queries = [];
org_codes.forEach(org => {
  org_queries.push(db_query(org));
})
Promise.all(org_queries)

推荐阅读