Как сделать ЗАПРОС с помощью «NOT_CONTAINS» в nodejs с помощью DynamoDB

#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
}
 

Спасибо.