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

时间:2017-07-19 14:21:13

标签: javascript node.js lambda amazon-dynamodb

Here is the table structure. In posts column it is a list of strings
所以我一直在阅读并试图将filterExpression与'contains'一起使用。 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");
        }
    }
});


每当我做测试时,它都会给我这样的信息:

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

AWS Console上的奇怪之处就是没有问题,只需在带有node.js的lambda中使用它就会出现此错误。

1 个答案:

答案 0 :(得分:1)

这是正确的语法。

FilterExpression : 'contains (#tag, :post)'