#amazon-web-services #amazon-dynamodb #dynamodb-queries
Вопрос:
Запрашивая Dynamodb для получения списка записей из таблицы, здесь мне нужно выполнить некоторые фильтры для запроса. Мне нужно проверить идентификатор пользователя в списке в моей таблице, если идентификатор пользователя совпадает с записью, следует игнорировать. Мне нужно это условие, я попытался использовать некоторые примеры для CONTAINS, и это работает, и я не знаю, как написать код для NOT_CONTAINS.
ниже приведен пример кода.
var params = {
TableName: config.aws_table_name,
IndexName: "active",
ExclusiveStartKey: key_value,
ExpressionAttributeNames: {
"#timestamp": "timestamp",
"#tu1": "taggedUsers",
},
KeyConditionExpression: "active = :ac and #timestamp BETWEEN :from AND :to",
FilterExpression: "#tu1 NOT_CONTAINS :tu2",
ProjectionExpression: "title, description",
ExpressionAttributeValues: {
":ac": "true",
":from": 1632919324385,
":to": Date.now(),
":tu2": userId,
},
Limit: req.query.limit,
};
const result = docClient.query(params, function (err, data) {
if (err) {
console.log(err);
res.send({
success: false,
message: err,
});
} else {
const { LastEvaluatedKey } = data;
const { Items } = data;
res.send({
success: true,
posts: Items,
lastEvaluatedKey: LastEvaluatedKey,
});
}
});
Как вы можете видеть, я использую BETWEEN, но я не знаю, как использовать NOT_CONTAINS, LE и NE.
пожалуйста, приведите несколько примеров параметров для запроса в node.js.
Спасибо
https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html
Ответ №1:
Я нашел решение этой проблемы. Просто дайте между not_contains. как будто это не содержит(#tu1, :tu2).
var params = {
TableName: config.aws_table_name,
IndexName: "active",
ExclusiveStartKey: key_value,
KeyConditionExpression: "active = :ac and #timestamp BETWEEN :from AND :to",
ProjectionExpression: "title, description",
FilterExpression : "not contains(#tu1, :tu2)",
ExpressionAttributeNames: {
"#timestamp": "timestamp",
"#tu1": "taggedUsers"
},
ExpressionAttributeValues: {
":ac": "true",
":from": 1632919324385,
":to": Date.now(),
":tu2": userId
},
Limit: req.query.limit
}
Спасибо.