如何使用 DynamoDB 在 nodejs 中使用 "NOT_CONTAINS" 进行查询
How to make QUERY using "NOT_CONTAINS" in nodejs with DynamoDB
在 Dynamodb 中查询来自 table 的帖子列表,这里我需要对查询进行一些过滤。
我需要检查 user-id 在我的 table 列表中,如果 user-id 匹配记录应该被忽略。我需要这个条件我尝试使用一些示例 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
我已经找到了这个问题的解决方案。
只需在 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
}
谢谢。
在 Dynamodb 中查询来自 table 的帖子列表,这里我需要对查询进行一些过滤。 我需要检查 user-id 在我的 table 列表中,如果 user-id 匹配记录应该被忽略。我需要这个条件我尝试使用一些示例 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
我已经找到了这个问题的解决方案。 只需在 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
}
谢谢。