DynamoDB查询attlibute集

时间:2019-08-14 21:39:31

标签: amazon-dynamodb

我对DynamoDB相当陌生,目前我正在尝试使用Node.js的AWS示例。我对本教程有疑问:AWS tutorial to load a movie DB and query data.

我想搜索指定演员出演的电影。 例如,“ Daniel Bruhl”和“ Olivia Wilde”。 另一个示例是“ Daniel Bruhl”或“ Hugh Jackman”。 另外,如果可能的话,我想搜索模糊(例如“ ??? Bruhl”)。

是否需要拆分表或定义过滤器?

样本数据:

{
    "year" : 2013,
    "title" : "Turn It Down, Or Else!",
    "info" : {
        "directors" : [
            "Alice Smith",
            "Bob Jones"
        ],
        "release_date" : "2013-01-18T00:00:00Z",
        "rating" : 6.2,
        "genres" : [
            "Comedy",
            "Drama"
        ],
        "image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
        "plot" : "A rock band plays their music at high volumes, annoying the neighbors.",
        "rank" : 11,
        "running_time_secs" : 5215,
        "actors" : [
            "David Matthewman",
            "Ann Thomas",
            "Jonathan G. Neff"
       ]
    }
}

模式:

    TableName : "Movies",
    KeySchema: [       
        { AttributeName: "year", KeyType: "HASH"},  //Partition key
        { AttributeName: "title", KeyType: "RANGE" }  //Sort key
    ],
    AttributeDefinitions: [       
        { AttributeName: "year", AttributeType: "N" },
        { AttributeName: "title", AttributeType: "S" }
    ],
    ProvisionedThroughput: {       
        ReadCapacityUnits: 10, 
        WriteCapacityUnits: 10
    }

表格已填写:

allMovies.forEach(function(movie) {
    var params = {
        TableName: "Movies",
        Item: {
            "year":  movie.year,
            "title": movie.title,
            "info":  movie.info
        }
    };

   docClient.put(params, function(err, data) {
       if (err) {
           console.error("Unable to add movie", movie.title, ". Error JSON:", JSON.stringify(err, null, 2));
       } else {
           console.log("PutItem succeeded:", movie.title);
       }
    });

1 个答案:

答案 0 :(得分:0)

查看Specifying Item Attributes文档。您的info字段是JSON,因此可以告诉Dynamo查看子字段,子子字段等。

然后,将这些与Condition Expressions结合使用即可获得所需的功能。

请记住,尽管这些事情可能,但它们是否有效仍然取决于表模式。 Looking around a bit我认为您无法在actors子字段上建立索引,因此,如果您希望对此类查询执行以下操作,则需要将数据拉出到其自己的列中以建立索引。快点。