根据不存在于所有对象中的过滤器扫描 dynamodb table
Scan dynamodb table based on filter which is not present in all object
所以我正在尝试根据角色过滤我的 dynamoDb 数据,因为您可以看到角色属性存在于某些对象中而不是所有对象中
[
{
id: "7",
email: 'test1@gmail.com',
name: 'test1',
age: '12',
},
{
id: "8",
email: 'test2@gmail.com',
name: 'test2',
age: '12',
},
{
email: 'test3@gmail.com',
name: 'test3',
age: '12',
test: 'test',
role: 'ADMIN'
},
{
email: 'test4@gmail.com',
name: 'test4',
age: '12',
test: 'test',
role: 'ADMIN'
}
]
如果我尝试使用 email 进行扫描,它会起作用,但如果我尝试使用 role 进行扫描,则会出现错误:
无效的FilterExpression:属性名称是保留关键字;保留关键字:role
我试过代码
let params = {
TableName: 'tableName',
FilterExpression: 'role =:role',
ExpressionAttributeValues: { ':role': 'ADMIN' },
expressionAttributeNames: { '#role': 'role' }
}
let result = await this.docClient.scan(params).promise();
还有这个
let params = {
TableName: 'tableName',
FilterExpression: 'attribute_not_exists(role)',
ExpressionAttributeValues: { ':role': 'ADMIN' },
expressionAttributeNames: { '#role': 'role' }
}
let result = await this.docClient.scan(params).promise();
都给我同样的错误
我认为您的第一个代码片段中有错字。 FilterExpression: 'role =:role',
应该是 FilterExpression: '#role =:role',
.
所以下面应该有效,
let params = {
TableName: 'tableName',
FilterExpression: '#role =:role',
ExpressionAttributeValues: { ':role': 'ADMIN' },
ExpressionAttributeNames: { '#role': 'role' }
}
let result = await this.docClient.scan(params).promise();
所以我正在尝试根据角色过滤我的 dynamoDb 数据,因为您可以看到角色属性存在于某些对象中而不是所有对象中
[
{
id: "7",
email: 'test1@gmail.com',
name: 'test1',
age: '12',
},
{
id: "8",
email: 'test2@gmail.com',
name: 'test2',
age: '12',
},
{
email: 'test3@gmail.com',
name: 'test3',
age: '12',
test: 'test',
role: 'ADMIN'
},
{
email: 'test4@gmail.com',
name: 'test4',
age: '12',
test: 'test',
role: 'ADMIN'
}
]
如果我尝试使用 email 进行扫描,它会起作用,但如果我尝试使用 role 进行扫描,则会出现错误: 无效的FilterExpression:属性名称是保留关键字;保留关键字:role
我试过代码
let params = {
TableName: 'tableName',
FilterExpression: 'role =:role',
ExpressionAttributeValues: { ':role': 'ADMIN' },
expressionAttributeNames: { '#role': 'role' }
}
let result = await this.docClient.scan(params).promise();
还有这个
let params = {
TableName: 'tableName',
FilterExpression: 'attribute_not_exists(role)',
ExpressionAttributeValues: { ':role': 'ADMIN' },
expressionAttributeNames: { '#role': 'role' }
}
let result = await this.docClient.scan(params).promise();
都给我同样的错误
我认为您的第一个代码片段中有错字。 FilterExpression: 'role =:role',
应该是 FilterExpression: '#role =:role',
.
所以下面应该有效,
let params = {
TableName: 'tableName',
FilterExpression: '#role =:role',
ExpressionAttributeValues: { ':role': 'ADMIN' },
ExpressionAttributeNames: { '#role': 'role' }
}
let result = await this.docClient.scan(params).promise();