Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Dynamodb-对象数组中JSON对象的更新值_Node.js_Amazon Dynamodb - Fatal编程技术网

Node.js Dynamodb-对象数组中JSON对象的更新值

Node.js Dynamodb-对象数组中JSON对象的更新值,node.js,amazon-dynamodb,Node.js,Amazon Dynamodb,下面是DynamoDb中存储的示例项对象/记录。我使用NodeJS和AWS.DynamoDB.DocumentClient来访问数据库 我正在构建一个PUT函数来更新数组中JSON对象的状态。该功能将访问项目的uuid和房间的uuid。在给定JSON对象数组的情况下,如何简单(创造性地)更新相应的status字段的值 参数: let params = { TableName: room-table, Key: { uuid: event.body.uuid }, Upda

下面是DynamoDb中存储的示例项对象/记录。我使用NodeJS和AWS.DynamoDB.DocumentClient来访问数据库

我正在构建一个PUT函数来更新数组中JSON对象的状态。该功能将访问项目的
uuid
和房间的
uuid
。在给定JSON对象数组的情况下,如何简单(创造性地)更新相应的
status
字段的值

参数:

let params = {
  TableName: room-table,
  Key: {
    uuid: event.body.uuid
  },
  UpdateExpression : "??",
  ExpressionAttributeNames: {
      "??":"??"
  },
  ExpressionAttributeValues:{
    "??":"??"
  },
  ReturnValues:"ALL_NEW"
};
项目对象:

{
  "Item": {
    "uuid": "77b1e88e-5e60-44d9-b6ca-aec345c0dc99",
    "rooms": [
      {
        "room": "303",
        "status": "pending",
        "uuid": "b8f1c1a8-04a9-4c2e-82ad-bc3e81face35"
      },
      {
        "room": "302",
        "status": "pending",
        "uuid": "42fdc61a-4a25-4316-90c9-60209875d208"
      },
      {
        "room": "678",
        "status": "pending",
        "uuid": "7bedc115-20ed-4c3e-9cd7-7fed0520f4df"
      }
    ],
    "status": "pending"
  }
}

需要ExpressionAttributeNames,因为状态为。有关属性名称和属性值占位符的详细信息,请参阅。

无法使用
表达式属性值执行此操作。我必须构建一个函数来修改对象,如下所示:

function setStatus(jsonObj, uuid, newStatus) {
  for (var i=0; i<jsonObj.length; i++) {
    if (jsonObj[i].uuid === uuid) {
      jsonObj[i].status = newStatus;
      return jsonObj;
    }
  }
}
函数setStatus(jsonObj、uuid、newStatus){

对于(var i=0;我刚刚注意到您的问题是关于更新整个数组的。我的答案是关于1个元素……嗨,Peter,我的目标是更新数组中的单个对象,而不是所有数组对象中的同一字段。在单个更新请求中不可能,因为Dynamo将无法“查找”
Item.rooms
数组中的正确索引。唯一可行的方法是将
Item.rooms
从一个数组更改为一个对象,其中每个键都是一个房间的uuid。然后,您可以使用类似于
设置房间的更新表达式。#roomUUID.status=:roomStatus
。好的,您可以将其作为y提交吗我们的答案?看来我需要用下划线来帮助我。
function setStatus(jsonObj, uuid, newStatus) {
  for (var i=0; i<jsonObj.length; i++) {
    if (jsonObj[i].uuid === uuid) {
      jsonObj[i].status = newStatus;
      return jsonObj;
    }
  }
}