Ответ, опубликованный выше, должен работать согласно документации. Но при использовании Node.JS AWS DynamoDB SDK DocumentClient это не так. В частности, я попробовал:
{
TableName: "site",
IndexName: "orgId-lastCaptured-index",
KeyConditionExpression: "orgId = :orgId",
FilterExpression: "categories CONTAINS :categoriesValue",
ExpressionAttributeValues: {
":orgId": orgId,
":categoriesValue": myVariable,
}
}
Это привело к следующей ошибке: { ValidationException: Invalid FilterExpression: Syntax error; token: "CONTAINS", near: "categories CONTAINS :categoriesValue"
Я настроил запрос на альтернативное форматирование запроса следующим образом:
{
TableName: "site",
IndexName: "orgId-lastCaptured-index",
KeyConditions: {
orgId: {
ComparisonOperator: "EQ",
AttributeValueList: [orgId],
},
},
QueryFilter: {
categories: {
ComparisonOperator: "CONTAINS",
AttributeValueList: [myVariable],
}
}
}
Это сработало, как и ожидалось, отфильтровав возвращаемые результаты так, что переменная categories
имеет элемент, соответствующий myVariable
.
Обновление: теперь вы можете выполнять CONTAINS
операций без использования устаревшего QueryFilter
с этим синтаксисом: FilterExpression: "contains(categories, :categoriesValue)"