亚马逊迪纳摩DB 表达式
这个库提供了一些抽象 设计用来处理 Amazon DynamoDB表达式对于JavaScript开发者来说更加容易和自然.
属性路径
这个 AttributePath 类提供了一个简单的写法 DynamoDB 文档
路径。 。 。 .
如果构造器收到字符串,它将通过扫描来解析路径
点数( n).),它指定地图属性去引用和左括号([, (中文(简体) ),
指定列表属性去引用。 譬如说,
'ProductReviews.FiveStar[0].reviewer.username' 将理解为
提及 username 财产的财产 reviewer 财产
列表中存储的元素 FiveStar 顶层属性
ProductReviews 文档属性.
如果财产名称含有左括号或圆点,则可能用
反斜线 \。例如, Product\.Reviews 将解释为单一
顶级文档属性,而不是地图属性访问.
属性值
此库将使用运行时类型检测来集合遇到的值 。 若为
您的值已经以 DynamoDB 所期望的格式存在,您可以
把它交给 AttributeValue 用于引导其他表达式助手的构造器
不要再把价值分解出来.
条件表达式
DynamoDB条件表达式可能以函数调用的形式出现,或者作为函数调用的形式出现
组合值和内插运算符。 因此,该图书馆定义了
ConditionExpression 作为联盟 FunctionExpression
和被标记的表达式操作员类型的联盟。 表达式可能是复合的
或简单.
复合表达式
这些表达式包含一个或多个简单的表达式,并且是真实的或虚假的 基于其包含的子表达式的值。 公认的大院 表达式为:
And 表达式
确信子表达的所有条件都得到满足.
import {ConditionExpression} from '@aws/dynamodb-expressions';
const andExpression: ConditionExpression = {
type: 'And',
conditions: [
// one or more subexpressions
]
};
Or 表达式
认定至少有一个子表达条件得到满足.
import {ConditionExpression} from '@aws/dynamodb-expressions';
const orExpression: ConditionExpression = {
type: 'Or',
conditions: [
// one or more subexpressions
]
};
Not 表达式
认定子表达条件不满足.
import {ConditionExpression} from '@aws/dynamodb-expressions';
const notExpression: ConditionExpression = {
type: 'Not',
condition: {
type: 'LessThan',
subject: 'foo',
object: 100
}
};
简单表达式
这些表达式对已知的 DynamotB 对象中的一个属性提出了断言
作为表达 subject编辑 subject 必须是字符串或字符串 属性
路径。 。 。 .
本图书馆将所用特定断言称为
ConditionExpressionPredicate上游可与其
subject 但只有在配对时才成为有效的表达式 subject编辑
支持的条件表达式上游为:
Equals 表达式上游
创建一个条件, 如果定义是真实的 subject 与
定义 object例如,下列上游物体声称:
主体的值为 'bar'数字 :
import {
ConditionExpression,
ConditionExpressionPredicate,
} from '@aws/dynamodb-expressions';
let equalsExpressionPredicate: ConditionExpressionPredicate = {
type: 'Equals',
object: 'bar'
};
// you can also define an equality predicate with the `equals` helper method
import {equals} from '@aws/dynamodb-expressions';
equalsExpressionPredicate = equals('bar');
// combine with a subject to create a valid condition expression
const equalsExpression: ConditionExpression = {
...equalsExpressionPredicate,
subject: 'foo'
};
object 也许是 属性路径,一个 属性
价值,或另一种类型。 如果收到后一种类型,
将使用 @aws/dynamodb-auto-marshaller 软件包.
NotEquals 表达式上游
创建一个条件, 如果定义是真实的 subject 与
定义 object例如,下列上游物体声称:
主体没有值 : 'bar'数字 :
import {
ConditionExpression,
ConditionExpressionPredicate,
} from '@aws/dynamodb-expressions';
let equalsExpressionPredicate: ConditionExpressionPredicate = {
type: 'NotEquals',
object: 'bar'
};
// you can also define an equality predicate with the `equals` helper method
import {notEquals} from '@aws/dynamodb-expressions';
equalsExpressionPredicate = notEquals('bar');
// combine with a subject to create a valid condition expression
const equalsExpression: ConditionExpression = {
...equalsExpressionPredicate,
subject: 'foo'
};
object 也许是 属性路径,一个 属性
价值,或另一种类型。 如果收到后一种类型,
将使用 @aws/dynamodb-auto-marshaller 软件包.
LessThan 表达式上游
创建一个条件, 如果定义是真实的 subject 低于
定义 object例如,下列上游物体声称:
科目少于10:
import {
ConditionExpression,
ConditionExpressionPredicate,
} from '@aws/dynamodb-expressions';
let equalsExpressionPredicate: ConditionExpressionPredicate = {
type: 'LessThan',
object: 10
};
// you can also define an equality predicate with the `equals` helper method
import {lessThan} from '@aws/dynamodb-expressions';
equalsExpressionPredicate = lessThan(10);
// combine with a subject to create a valid condition expression
const equalsExpression: ConditionExpression = {
...equalsExpressionPredicate,
subject: 'foo'
};
object 也许是 属性路径,一个 属性
价值,或另一种类型。 如果收到后一种类型,
将使用 @aws/dynamodb-auto-marshaller 软件包.
LessThanOrEqualTo 表达式上游
创建一个条件, 如果定义是真实的 subject 少于或等于
改为定义 object. 例如,下列上游物体声称
该主体小于或等于10:
import {
ConditionExpression,
ConditionExpressionPredicate,
} from '@aws/dynamodb-expressions';
let equalsExpressionPredicate: ConditionExpressionPredicate = {
type: 'LessThanOrEqualTo',
object: 10
};
// you can also define an equality predicate with the `equals` helper method
import {lessThanOrEqualTo} from '@aws/dynamodb-expressions';
equalsExpressionPredicate = lessThanOrEqualTo(10);
// combine with a subject to create a valid condition expression
const equalsExpression: ConditionExpression = {
...equalsExpressionPredicate,
subject: 'foo'
};
object 也许是 属性路径,一个 属性
价值,或另一种类型。 如果收到后一种类型,
将使用 @aws/dynamodb-auto-marshaller 软件包.
GreaterThan 表达式上游
创建一个条件, 如果定义是真实的 subject 大于
定义 object例如,下列上游物体声称:
对象大于10:
import {
ConditionExpression,
ConditionExpressionPredicate,
} from '@aws/dynamodb-expressions';
let equalsExpressionPredicate: ConditionExpressionPredicate = {
type: 'GreaterThan',
object: 10
};
// you can also define an equality predicate with the `equals` helper method
import {greaterThan} from '@aws/dynamodb-expressions';
equalsExpressionPredicate = greaterThan(10);
// combine with a subject to create a valid condition expression
const equalsExpression: ConditionExpression = {
...equalsExpressionPredicate,
subject: 'foo'
};
object 也许是 属性路径,一个 属性
价值,或另一种类型。 如果收到后一种类型,
将使用 @aws/dynamodb-auto-marshaller 软件包.
GreaterThanOrEqualTo 表达式上游
创建一个条件, 如果定义是真实的 subject 大于或大于
等于定义 object。例如,以下上游对象
声称该标的大于或等于10:
import {
ConditionExpression,
ConditionExpressionPredicate,
} from '@aws/dynamodb-expressions';
let equalsExpressionPredicate: ConditionExpressionPredicate = {
type: 'GreaterThanOrEqualTo',
object: 10
};
// you can also define an equality predicate with the `equals` helper method
import {greaterThanOrEqualTo} from '@aws/dynamodb-expressions';
equalsExpressionPredicate = greaterThanOrEqualTo(10);
// combine with a subject to create a valid condition expression
const equalsExpression: ConditionExpression = {
...equalsExpressionPredicate,
subject: 'foo'
};
object 也许是 属性路径,一个 属性
价值,或另一种类型。 如果收到后一种类型,
将使用 @aws/dynamodb-auto-marshaller 软件包.
Between 表达式上游
创建一个条件, 如果定义是真实的 subject 在定义之间
lowerBound 财务报告和审定财务报表 upperBound。例如,以下上游对象
声称该主体大于或等于10,小于或等于
改为99:
import {
ConditionExpression,
ConditionExpressionPredicate,
} from '@aws/dynamodb-expressions';
let equalsExpressionPredicate: ConditionExpressionPredicate = {
type: 'Between',
lowerBound: 10,
upperBound: 99
};
// you can also define an equality predicate with the `equals` helper method
import {between} from '@aws/dynamodb-expressions';
equalsExpressionPredicate = between(10, 99);
// combine with a subject to create a valid condition expression
const equalsExpression: ConditionExpression = {
...equalsExpressionPredicate,
subject: 'foo'
};
lowerBound 财务报告和审定财务报表 upperBound 也许两者都是 属性路径, (中文(简体) ),
a 一个 属性值,或另一种类型。 如果后一种类型
将使用 @aws/dynamodb-auto-marshaller
软件包.
Membership 表达式上游
创建一个条件, 如果定义是真实的 subject 等于成员
列表中定义的值。 例如,以下上游物体声称:
主题之一 'fizz', (中文(简体) ), 'buzz',或 'fizzbuzz'数字 :
import {
ConditionExpression,
ConditionExpressionPredicate,
} from '@aws/dynamodb-expressions';
let equalsExpressionPredicate: ConditionExpressionPredicate = {
type: 'Membership',
values: ['fizz', 'buzz', 'fizzbuzz']
};
// you can also define an equality predicate with the `equals` helper method
import {inList} from '@aws/dynamodb-expressions';
equalsExpressionPredicate = inList('fizz', 'buzz', 'fizzbuzz');
// combine with a subject to create a valid condition expression
const equalsExpression: ConditionExpression = {
...equalsExpressionPredicate,
subject: 'foo'
};
数字 values 数组可能是 属性路径, (中文(简体) ),
a 一个 属性值,或另一种类型。 如果后一种类型
将使用 @aws/dynamodb-auto-marshaller
软件包.
序列化条件表达式
要序列化条件表达式,请通过 ConditionExpression 对象和一个
实例 ExpressionAttributes。 。 。 .
表达式属性
Amazon DynamoDB 表达式被串行化为串行化
重要控制字符和保留词。 这个 ExpressionAttributes
对象将避开属性名称和属性值,以便在
任何表达 当一个完整的DynamoDB请求输入准备发送时,你可以
获取一个 ExpressionAttributeNames 财务报告和审定财务报表 ExpressionAttributeValues 形状
与输入一起发送 :
import {
AttributePath,
AttributeValue,
ExpressionAttributes,
} from '@aws/dynamodb-expressions';
const DynamoDb = require('aws-sdk/clients/dynamodb');
const attributes = new ExpressionAttributes();
// you can add a string attribute name
const escapedFoo = attributes.addName('foo');
// or a complex path
const escapedPath = attributes.addName('bar.baz[3].snap.crackle.pop');
// or an already parsed attribute path
attributes.addName(new AttributePath('path.to.nested.field'));
// raw JavaScript values added will be converted to AttributeValue objects
const escapedRaw = attributes.addValue(42);
// already marshalled values must be wrapped in an AttributeValue object
const escapedMarshalled = attributes.addValue(new AttributeValue({N: "42"}));
const client = new DynamoDb();
client.query({
TableName: 'my_table',
KeyConditionExpression: `${escapedFoo} = ${escapedRaw} AND ${escapedPath} = ${escapedMarshalled}`,
ExpressionAttributeNames: attributes.names,
ExpressionAttributeValues: attributes.values,
})
函数表达式
函数表达式代表 DynataB 将执行的指定函数
代表你们 第一个参数传递到 FunctionExpression 显示
函数名称并必须是字符串;所有后续参数都代表
要传递到函数的参数。 这些参数可能是:
AttributePath (使函数评价部分 DynamoDB 文件到
函数的适用), AttributeValue (已经到期)
属性变量对象,或任意的 JavaScript 值(这些将转换)
编辑 @aws/dynamodb-auto-marshaller 软件包 Marshaller:
import {
AttributePath,
ExpressionAttributes,
FunctionExpression,
} from '@aws/dynamodb-expressions';
const expr = new FunctionExpression(
'list_append',
new AttributePath('path.to.list'),
'foo'
);
const attributes = new ExpressionAttributes();
// serializes as 'list_append(#attr0.#attr1.#attr2, :val3)'
const serialized = expr.serialize(attributes);
console.log(attributes.names); // {'#attr0': 'path', '#attr1': 'to', '#attr2': 'list'}
console.log(attributes.values); // {':val3': {S: 'foo'}}
数学表达式
数学表达式用于 SET 更新表达式的条款
从包含数字值的属性中添加或减去数字:
import {MathematicalExpression} from '@aws/dynamodb-expressions';
const expr = new MathematicalExpression('version', '+', 1);
投影表达式
投影表达式告诉 DynamoDB 在获取中包含哪些属性
记录返回 GetItem, (中文(简体) ), Query,或 Scan 操作。 此库使用
ProjectionExpression 作为字符串和
AttributePath 对象.
更新表达式
更新表达式允许在 DynamoDB 中部分更新,以替换记录. 这一表述可能最多有四条,其中一条载有指示,规定: 记录中的值,其中包含从 记录,其中包含给一组添加值的指示,以及最后一个 包含从一组中删除值的指示.
import {
AttributePath,
FunctionExpression,
UpdateExpression,
} from '@aws/dynamodb-expressions';
const expr = new UpdateExpression();
// set a value by providing its key and the desired value
expr.set('foo', 'bar');
// you may also set properties in nested maps and lists
expr.set(
'path.to.my.desired[2].property',
new FunctionExpression(
'list_append',
new AttributePath('path.to.my.desired[2].property'),
'baz'
)
);
// remove a value by providing its key or path
expr.remove('fizz.buzz.pop[0]');
// add a value to a set
expr.add('string_set', 'foo');
// delete a value from the same set
expr.delete('string_set', 'bar');