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

Ami*_*Gur 3 amazon-web-services node.js 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");
});
Run Code Online (Sandbox Code Playgroud)

我正在运行此代码:

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)

    }
});
Run Code Online (Sandbox Code Playgroud)

而且我收到了这个错误

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

任何的想法?

not*_*est 15

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

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

2)KeyConditionExpression- 只能参考哈希和排序键.所以,我假设该属性genres被定义为表的SORT键

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

结论 - 参考第3点直接回答

  • 但这里的例子表明`contains`可用于`KeyConditionExpression`?https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SQLtoNoSQL.ReadData.Query.html (4认同)
  • @MKYung 我现在也完全困惑了。官方文档清楚地表明“包含”可以在 KeyConditionExpression 中使用 (2认同)