Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.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
Javascript 使用node.js使用嵌套对象对dynamoDB进行条件更新_Javascript_Node.js_Aws Lambda_Nosql_Dynamodb Queries - Fatal编程技术网

Javascript 使用node.js使用嵌套对象对dynamoDB进行条件更新

Javascript 使用node.js使用嵌套对象对dynamoDB进行条件更新,javascript,node.js,aws-lambda,nosql,dynamodb-queries,Javascript,Node.js,Aws Lambda,Nosql,Dynamodb Queries,我试图更新数据库表中的3个嵌套项,我的lambda运行良好,没有任何错误,但是当查询表时,它没有显示新值,我不确定我是否调用表或正确传递参数 我的分区键/主键是badgeNumber 我的dynamoDB表如下所示: 我试图更新的项目有日期、小时、注册到yyy mm dd、hh mm ss和true 更新项目的条件是,如果register is=false,则将新值写入表中 我的代码如下所示 pppp var UPDATEASISTANCE=函数日、小时、id{ var docClient=ne

我试图更新数据库表中的3个嵌套项,我的lambda运行良好,没有任何错误,但是当查询表时,它没有显示新值,我不确定我是否调用表或正确传递参数

我的分区键/主键是badgeNumber

我的dynamoDB表如下所示: 我试图更新的项目有日期、小时、注册到yyy mm dd、hh mm ss和true

更新项目的条件是,如果register is=false,则将新值写入表中

我的代码如下所示 pppp

var UPDATEASISTANCE=函数日、小时、id{ var docClient=new AWS.DynamoDB.DocumentClient; 变量参数={ TableName:someTable, 密钥:{badgeNumber:0000}, UpdateExpression:SET asi[0]。reg=:locVal, 表达式属性名称:{ “asi”:“asisstance”, '注册':'注册', }, 条件表达式:NEasi[0]。reg:true, 表达式属性值:{ :日期:日, :小时:小时, :locVal:true }, ReturnValues:UPDATED\u NEW }; docClient.updateparams,functionerr,data{ 如果出错{ console.logError,err; }否则{ console.logSuccess,数据; } }; }; 定义函数后,我使用

updateAssistance(day,hour,id)
预期输出应如下所示:

  "assistance": [
    {
      "date": "yyyy-MM-DD",
      "hour": "HH-MM-SS",
      "register": true
    }
  ],

我通过修改代码解决了这个问题,同时,我的条件表达式也错了……下面是它的样子

'use strict';
const AWS = require('aws-sdk');

var today = new Date();
var date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
var hour = (today.getHours()-5) + ":" + today.getMinutes() + ":" + today.getSeconds();

exports.handler = async (event,context) => {

    const documentClient = new AWS.DynamoDB.DocumentClient();
    let responseBody = "";
    let statusCode = 0;

    var params = {
    TableName:"SomeTable",
    Key: { badgeNumber : '0000' },
    UpdateExpression: "set assistance[0].register = :n,assistencia[0].date = :date,assistencia[0].hour = :hour",
    ExpressionAttributeNames: {
      '#asi': 'assistance',
      '#reg': 'register'
    },
    ConditionExpression: "(#asi[0].#reg = :p)",
    ExpressionAttributeValues:{
        ":n":true,
        ":p":false,
        ":date":date,
        ":hour":hour
    },
    ReturnValues:"UPDATED_NEW"
    }


    try {
        const data = await documentClient.update(params).promise();
        responseBody = JSON.stringify(data);
        statusCode = 204;
    } catch (err) {
        responseBody = `Unable to update product: ${err}`;
        statusCode = 403;
    }    

    const response = {
        statusCode: statusCode,
        headers: {
            "Content-Type": "application/json"
        },
        body:responseBody
    }
    return response
}
这会改变dynamoDB表中的嵌套值,如果您没有这些值的话

'use strict';
const AWS = require('aws-sdk');

var today = new Date();
var date = today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate();
var hour = (today.getHours()-5) + ":" + today.getMinutes() + ":" + today.getSeconds();

exports.handler = async (event,context) => {

    const documentClient = new AWS.DynamoDB.DocumentClient();
    let responseBody = "";
    let statusCode = 0;

    var params = {
    TableName:"SomeTable",
    Key: { badgeNumber : '0000' },
    UpdateExpression: "set assistance[0].register = :n,assistencia[0].date = :date,assistencia[0].hour = :hour",
    ExpressionAttributeNames: {
      '#asi': 'assistance',
      '#reg': 'register'
    },
    ConditionExpression: "(#asi[0].#reg = :p)",
    ExpressionAttributeValues:{
        ":n":true,
        ":p":false,
        ":date":date,
        ":hour":hour
    },
    ReturnValues:"UPDATED_NEW"
    }


    try {
        const data = await documentClient.update(params).promise();
        responseBody = JSON.stringify(data);
        statusCode = 204;
    } catch (err) {
        responseBody = `Unable to update product: ${err}`;
        statusCode = 403;
    }    

    const response = {
        statusCode: statusCode,
        headers: {
            "Content-Type": "application/json"
        },
        body:responseBody
    }
    return response
}