【问题标题】:Query onto a dynamoDb table查询 dynamoDb 表
【发布时间】:2020-12-31 10:20:59
【问题描述】:

我正在尝试获取满足我已经定义的过滤器的数据库的所有记录。问题是我必须根据组织的数量重复 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

非常感谢!

【问题讨论】:

  • 我猜你的方案没有排序键?所以它不会像这种情况下的预期那样工作。从您的情况来看,我假设您尝试查询特定日期范围内的一些行。
  • 不,最后我和组织做了一个 forEach 但仍然需要设置一个 setTimeOut 因为等待对我不起作用......有什么想法吗?

标签: node.js amazon-web-services aws-lambda amazon-dynamodb dynamodb-queries


【解决方案1】:

你可以试试这个:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多