Javascript 使用node.js使用嵌套对象对dynamoDB进行条件更新
我试图更新数据库表中的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,数据; } }; }; 定义函数后,我使用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
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
}