AWS DynamoDB 저장소를 쿼리하는 GraphQL 서버를 작성하려고합니다. 이 질문의 목적DynamoDB를 쿼리하는 가장 좋은 방법
는 GraphQL 부분은 인수 형태로 제공한다는 사실을 제외하고 무관하다 :
{
key1: value1,
key2: value2,
key3: value3
}
이 키/값 쌍은 데이터베이스에 대해 쿼리하는 데 사용됩니다. 엄격한 평등만을, 아무것도 공상. 모든 인수는 선택 사항입니다.
import { DynamoDB } from 'aws-sdk';
function constructParams(tableName, fields = {}) {
const keys = Object.keys(fields);
if (keys.length === 0) {
return {
TableName: tableName,
};
}
const filters = keys.map(key => `#${key} = :${key}`);
const attributeNames = keys.reduce((memo, key) => Object.assign(memo, {
[`#${key}`]: key,
}), {});
const attributeValues = keys.reduce((memo, key) => Object.assign(memo, {
[`:${key}`]: fields[key],
}), {});
return {
TableName: tableName,
FilterExpression: filters.join(' AND '),
ExpressionAttributeNames: attributeNames,
ExpressionAttributeValues: attributeValues,
};
}
function query(tableName, fields = {}) {
const docClient = new DynamoDB.DocumentClient({ region: 'ap-southeast-2' });
const params = constructParams(tableName, fields);
return new Promise((resolve, reject) => {
docClient.scan(params, (err, data) => {
if (err) {
reject(err);
} else {
resolve(data.Items);
}
});
});
}
export default query;
이 잘 작동 :
는 여기에 내가 무엇을 최대 온입니다. 그러나 선량은 성가시다. 내 constructParams
함수는 불필요한 상용구처럼 느낍니다. 이러한 함수는 MongoDB에서는 전혀 필요하지 않습니다.
이렇게하면 NoSQL 데이터베이스 용 SQL을 작성하는 것 같은 느낌이 들게되는 이유는 무엇입니까?