使用Nodejs在DynamoDB中插入现有地图中的地图结构

时间:2017-01-29 15:43:23

标签: json node.js amazon-web-services nested amazon-dynamodb

数据库中项目的结构如下所示:

{
    "cars": {
        "x": [
            {
                "time": 1485700907669,
                "value": 23
            }
        ]
    },
    "date": 1483214400000,
    "id":"1"
}

我必须将类型列表的新项目“z”添加到像

这样的汽车中
{
    "cars": {
        "x": [
            {
                "time": 1485700907669,
                "value": 23
            }
        ],
        "z": [
            {
                "time": 1485700907669,
                "value": 23
            }
        ]
    },
    "date": 1483214400000,
    "id": "1"
}

如果我想实现像这样的事情,Node.js中的更新表达式会是什么样子? 到目前为止,这是我提出的: set #car.#model= list_append(if_not_exists(#car.#model, :empty_list), :value)

但是,如果项目在创建时不存在,则会抛出错误。知道怎么做吗?

这是我正在使用的更新参数,仍然不起作用

  var params = {
  TableName:table,
  Key:{
      "id": id,
      "date": time.getTime()
  },
  ReturnValues: 'ALL_NEW',
  UpdateExpression: 'SET #car.#model = if_not_exists(#car.#model,     
  :empty_list)',
  ExpressionAttributeNames: {
    '#car': 'cars',
    '#model':"z"
  },
  ExpressionAttributeValues: {
    ':empty_list': [],
  }
 };

2 个答案:

答案 0 :(得分:0)

将更新表达式分为两个单独的表达式:

SET #car.#model = if_not_exists(#car.#model, :empty_list) SET #car.#model = list_append(#car.#model, :value)

答案 1 :(得分:0)

解决方案是分两步更新操作,首先为父级创建一个空映射,因为它首先不存在。 所以,就我而言

SET #car= :empty_map

其中:empty_map = {}

执行此操作后运行其他更新表达式

SET #car.#model = list_append(if_not_exists(#car.#model, :empty_list), :value)

其中:empty_list = []和:value = {                 "时间":1485700907669,                 "价值":23             }