我的表项目是
的形式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中使用的运算符无效:包含"
任何想法?
答案 0 :(得分:13)
这里有一些事情需要澄清。
1)DynamoDB的Key属性必须是标量数据类型。因此,我认为属性genres
不能定义为SET或LIST数据类型
2)KeyConditionExpression
- 只能引用哈希和排序键。所以,我假设属性genres
被定义为表
3)contains
可用于FilterExpression
数据类型STRING,SET或LIST。它不能在KeyConditionExpression
结论 - 请参阅第3点以获得直接答案