对查询DynamoDB感到困惑

时间:2017-05-03 13:22:52

标签: node.js amazon-dynamodb

我在DynamoDB中有以下数据。

enter image description here

我试图达到以下结果。 扫描表格并获取management is NULL and Location is Midwest

所在的行

我最初尝试使用以下查询来匹配Null

var scanningParameters = {
    TableName: 'LOB',
    FilterExpression: "#mgmt contains NULL",
    ExpressionAttributeNames: {
        "#mgmt": "Management",
    }
};

docClient.scan(scanningParameters, onScan);
function onScan(err, data) {
    if (err) {
        console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        // print all the movies
        console.log("Scan succeeded.");
        data.Items.forEach(function (data) {
            console.log(
                data.lineofbusiness + " name : ",
                data.name);
        });

        if (typeof data.LastEvaluatedKey != "undefined") {
            console.log("Scanning for more...");
            scanningParameters.ExclusiveStartKey = data.LastEvaluatedKey;
            docClient.scan(scanningParameters, onScan);
        }
    }
}

我得到了例外

{
    "message": "Invalid FilterExpression: Syntax error; token: \"contains\", near: \"#mgmtcontains NULL\"",
    "code": "ValidationException",
    "time": "2017-05-03T13:21:11.611Z",
    "requestId": "0T0GU59HRJ24P96D42H9QNC97RVV4KQNSO5AEMVJF66Q9ASUAAJG",
    "statusCode": 400,
    "retryable": false,
    "retryDelay": 13.73953651636839
}

请让我知道我哪里出错了,我该如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

以下是“NULL”值的扫描项目(即字符串属性为NULL的数据)。

我假设Management属性是String数据类型,包含字符串值“NULL”。

<强>代码: -

var AWS = require("aws-sdk");
var creds = new AWS.Credentials('akid', 'secret', 'session');

AWS.config.update({
    region: "us-west-2",
    endpoint: "http://localhost:8000",
    credentials : creds
});

var docClient = new AWS.DynamoDB.DocumentClient();

var params = {
    TableName: "lob",
    FilterExpression: "#mgmt = :mgmtVal",
    ExpressionAttributeNames: {
        "#mgmt": "Management",
    },
    ExpressionAttributeValues : {
        ":mgmtVal" : "NULL"
    }
};

docClient.scan(params, onScan);
var count = 0;

function onScan(err, data) {
    if (err) {
        console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Scan succeeded.");
        data.Items.forEach(function(itemData) {
           console.log("Item :", ++count,JSON.stringify(itemData));
        });

        if (typeof data.LastEvaluatedKey != "undefined") {
            params.ExclusiveStartKey = data.LastEvaluatedKey;
            docClient.scan(params, onScan);
        }
    }
}