如何在dynamoDB中为map dataType updateItem

时间:2016-01-25 20:57:09

标签: json node.js amazon-dynamodb

我正在尝试在dynamodb中使用Map数据类型来插入我的JSON对象。我从外部API获得的JSON有点长,并且在其中嵌套了对象数组。 (我正在使用nodejs。)

{
    "a": "foo",
    "b": "foo1",
    "c": [{
        "boo": 10,
        "boo1": 15
    }, {
        "boo": 19,
        "boo1": 45
    }, {
        "boo": 11,
        "boo1": 25
    }]
}

从我到目前为止所做的研究看起来我必须为我试图插入/更新的json中的每个元素指定类型。这使得它变得更难,因为在我的情况下,json可以有任何东西。

如果有人遇到同样的问题并且知道任何解决方案,请告诉我。

2 个答案:

答案 0 :(得分:2)

只有在使用低级别AmazonDB API时,才需要为每个值指定确切的类型。

但您可以使用AWS SDK使事情变得更加容易,您可以直接使用json表示法。

我没有使用node.js SDK(有使用python SDK的经验),但是查看examples,对于node.js也是如此。

检查一下:

var AWS = require("aws-sdk");

AWS.config.update({
  region: "us-west-2",
  endpoint: "http://localhost:8000"
});

var docClient = new AWS.DynamoDB.DocumentClient();    
var table = "Movies";    
var year = 2015;
var title = "The Big New Movie";

var params = {
    TableName:table,
    Item:{
        "year": year,
        "title": title,
        "info":{
            "plot":"Something happens."
        }
    }
};

console.log("Adding a new item...");
docClient.put(params, function(err, data) {
    if (err) {
        console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("Added item:", JSON.stringify(data, null, 2));
    }
});

传递到Item调用的params内的docClient.put只是一个普通的javascript对象。

答案 1 :(得分:1)

dynamodb必须知道您要插入/更新的数据类型。所以dynamodb或任何db只允许 特定于该列的数据类型。如果您希望将json(使用Jackson api)解析为特定类型并插入。以下是代码

    JsonParser parser = new JsonFactory().createParser(new File(
            "target/resources/json_file.json"));
    JsonNode rootNode = new ObjectMapper().readTree(parser);
    Iterator<JsonNode> iter = rootNode.iterator();
    ObjectNode currentNode;
    while (iter.hasNext()) {
        currentNode = (ObjectNode) iter.next();
        table.putItem(new Item().withPrimaryKey("a", currentNode.path("a").asText(), "b",
          currentNode.path("b").asText()).withJSON("c",currentNode.path("c").toString()));
    }

JsonParser parser = new JsonFactory().createParser(new File( "target/resources/json_file.json")); JsonNode rootNode = new ObjectMapper().readTree(parser); Iterator<JsonNode> iter = rootNode.iterator(); ObjectNode currentNode; while (iter.hasNext()) { currentNode = (ObjectNode) iter.next(); table.putItem(new Item().withPrimaryKey("a", currentNode.path("a").asText(), "b", currentNode.path("b").asText()).withJSON("c",currentNode.path("c").toString())); }