使用包含运算符的Dynamo数据库查询

时间:2017-05-25 08:46:33

标签: node.js amazon-web-services amazon-dynamodb

我的表项目是

的形式
function addDoc(movie,cb){
    var params = {
        TableName: "Movies",
        Item: {
            "year":  movie.year,
            "title": movie.title,
            "info":  movie.info,
            "genres" : movie.info.genres || []
        }
    };
    docClient.put(params, function(err, data) {
        bar.tick(1)
        i++;
        cb(err);
    });
}

async.eachLimit(allMovies,50,addDoc,function (err) {
    console.log(err)
    console.log("done inserting " + i + " movies");
});

我正在运行此代码:

var params = {
    TableName : "Movies",
    //ProjectionExpression:"#yr, title, genres, info.actors[0]",
    KeyConditionExpression: "#yr = :yyyy and contains(genres, :g1)",
    ExpressionAttributeNames:{
        "#yr": "year"
    },
    ExpressionAttributeValues: {
        ":yyyy":1992,
        ":g1" : "Drama"
    },
    //Select : "COUNT"
};
var start = Date.now()
docClient.query(params, function(err, data) {
    if (err) {
        console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
    } else {
        console.log("time elapsed :",Date.now()-start);
        console.log("Query succeeded.");

        console.log(data)

    }
});

我收到此错误

  

" KeyConditionExpression中使用的运算符无效:包含"

任何想法?

1 个答案:

答案 0 :(得分:13)

这里有一些事情需要澄清。

1)DynamoDB的Key属性必须是标量数据类型。因此,我认为属性genres不能定义为SET或LIST数据类型

2)KeyConditionExpression - 只能引用哈希和排序键。所以,我假设属性genres被定义为表

的SORT键

3)contains可用于FilterExpression数据类型STRING,SET或LIST。它不能在KeyConditionExpression

上使用

结论 - 请参阅第3点以获得直接答案