node.js - 查询 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
非常感谢!
解决方案
你可以试试这个:
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)
推荐阅读
- android - 在Android中使用背景动画为元素设置动画
- wordpress - 容器中的 Visual Composer 嵌套简码
- java - 读取文件时如何跳过某些文本区域?
- javascript - 当发现跳过的案例(xdescribe 或 xit)时,配置业力以使测试执行失败?
- angular - 如何在 Safari 桌面上调试“此网页因出现问题而重新加载”
- android - WebAPK 忽略在本地网络上运行的 PWA 的 display:standalone 标志
- javascript - JS对象内的嵌套循环
- r - R:绘制带有连续 x 轴的箱线图:为每个框选择一个间隔
- r - 与传单映射
- ffmpeg - ffmpeg 读取当前分段文件