我是 AWS DynamoDB 的初学者,我想使用 SENDTO.emailAddress = "first@first.com"作为 FilterExpression 扫描 DynamoDB。
数据库结构看起来像这样
{
ID
NAME
MESSAGE
SENDTO[
{
name
emailAddress
}
]
}
样本数据
{
ID: 1,
NAME: "HELLO",
MESSAGE: "HELLO WORLD!",
SENDTO: [
{
name: "First",
emailAddress: "first@first.com"
},
{
name: "Second",
emailAddress: "second@first.com"
}
]
}
我想检索与 emailAddress 匹配的文档。我尝试使用过滤器表达式进行扫描,这是我检索数据的代码。我正在使用 AWS Javascript SDK。
let params = {
TableName : "email",
FilterExpression: "SENDTO.emailAddress = :emailAddress",
ExpressionAttributeValues: {
":emailAddress": "first@first.com",
}
}
let result = await ctx.docClient.scan(params).promise();
最佳答案
为了通过 sendto
找到项目属性,你需要知道 name
和 emailAddress
属性值。 DynamoDB 无法仅通过对象中的一个属性(即 email
单独的属性值)找到数据。
包含 函数可用于查找 List 数据类型的数据。
CONTAINS is supported for lists: When evaluating "a CONTAINS b", "a" can be a list; however, "b" cannot be a set, a map, or a list.
使用包含的示例代码:-
var params = {
TableName: "email",
FilterExpression: "contains (SENDTO, :sendToVal)",
ExpressionAttributeValues: {
":sendToVal": {
"name" : "First",
"emailAddress" : "first@first.com"
}
}
};
如果您不知道
name
的值和 emailAddress
属性,您可能需要重构数据以满足您的用例。
关于amazon-dynamodb - 如何在 DynamoDB 中过滤嵌套数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47294056/