使用包含的 lambda (node.js) FilterExpression 查询 DynamoDB

Iva*_*ins 3 javascript lambda node.js amazon-dynamodb

这是表结构。在帖子列中,它是一个字符串列表
所以我一直在阅读并尝试将 filterExpression 与“包含”一起使用。node.js 中的文档只需要使用CONTAINS b,其中a可以是列表,而b对我来说是我正在搜索的字符串。

var db = new doc.DynamoDB();

var params = {
    TableName: "WIT_Search",
    KeyConditionExpression: "#type = :tag and #key between :start AND :end",
    FilterExpression: "#tag contains :post",
    ExpressionAttributeNames: {
        "#type": "type",
        "#tag": "posts",
        "#key": "key",
    },
    ExpressionAttributeValues: {
        ":tag": "tag",
         ":start": tag+"_",
         ":end": tag+"_999",
         ":post": postID
    }
};

console.log(params);

db.query(params, function(err, data) {
    if (err) {
        console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
    } else {
        console.log("Query succeeded.");
        console.log('Count =',data.Items.length);

        if (data.Items.length > 0){
            console.log("post exists in tag");
        }else{
            console.log("post doesnt exist in tag");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)


每当我进行测试时,它都会给我这条消息:

  Unable to query. Error: {
      "message": "Invalid FilterExpression: Syntax error; token: \"contains\", near: \"#tag contains (\"",
      "code": "ValidationException",
    }
Run Code Online (Sandbox Code Playgroud)

AWS 控制台上奇怪的事情它没有问题,只是在 lambda 中与 node.js 一起使用它会出现此错误。

not*_*est 7

这是正确的语法。

FilterExpression : 'contains (#tag, :post)'
Run Code Online (Sandbox Code Playgroud)