Dynamo db query using contains operator
16,427
There are few things that need to be clarified here.
1) The Key attributes of DynamoDB has to be scalar data type. So, I believe the attribute genres
can't be defined as SET or LIST data type
2) KeyConditionExpression
- can refer to Hash and Sort key only. So, I presume the attribute genres
is defined as SORT key of the table
3) contains
can be used on FilterExpression
on data types STRING, SET or LIST. It can't be used on KeyConditionExpression
Conclusion - Refer point 3 for straight forward answer
Author by
Amir Gur
Updated on June 22, 2022Comments
-
Amir Gur almost 2 years
My table items are of the form of
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"); });
I'm running this code :
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) } });
and I'm getting this error
"Invalid operator used in KeyConditionExpression: contains"
any idea?