有没有办法通过updateItem实现以下几点:1。如果DynamoDB 2中不存在属性,则添加属性。如果DynamoDB 3中存在属性,则更新属性。如果参数中不包含这些属性,请保持这些属性不变。
下面是一个例子:这是DynamoDB中的对象:
{
id: "1234",
variable1: "hello",
variable2: "world"
}
以下是我想更新的输入:
{
id: "1234",
variable1: "hello2",
variable23: "dog" // the variable name "variable23" could be anything
}
下面是我想要实现的DynamoDB中的更新项:
{
id: "1234",
variable1: "hello2",
variable2: "world",
variable23: "dog"
}
“variable23”可以是任何变量名作为输入。
请帮忙!我使用node。js,如果有人能给我展示一些代码来实现这一点,我真的很感激。
谢谢
这里有一个更安全和最新的功能来实现这一点:
const {
DynamoDBClient, UpdateItemCommand,
} = require('@aws-sdk/client-dynamodb');
const { marshall, unmarshall } = require('@aws-sdk/util-dynamodb');
const client = new DynamoDBClient({});
/**
* Update item in DynamoDB table
* @param {string} tableName // Name of the target table
* @param {object} key // Object containing target item key(s)
* @param {object} item // Object containing updates for target item
*/
const update = async (tableName, key, item) => {
const itemKeys = Object.keys(item);
// When we do updates we need to tell DynamoDB what fields we want updated.
// If that's not annoying enough, we also need to be careful as some field names
// are reserved - so DynamoDB won't like them in the UpdateExpressions list.
// To avoid passing reserved words we prefix each field with "#field" and provide the correct
// field mapping in ExpressionAttributeNames. The same has to be done with the actual
// value as well. They are prefixed with ":value" and mapped in ExpressionAttributeValues
// along witht heir actual value
const { Attributes } = await client.send(new UpdateItemCommand({
TableName: tableName,
Key: marshall(key),
ReturnValues: 'ALL_NEW',
UpdateExpression: `SET ${itemKeys.map((k, index) => `#field${index} = :value${index}`).join(', ')}`,
ExpressionAttributeNames: itemKeys.reduce((accumulator, k, index) => ({ ...accumulator, [`#field${index}`]: k }), {}),
ExpressionAttributeValues: marshall(itemKeys.reduce((accumulator, k, index) => ({ ...accumulator, [`:value${index}`]: item[k] }), {})),
}));
return unmarshall(Attributes);
};
可以动态更新属性。请参阅下面的代码。
export const update = (item) => {
console.log(item)
const Item = {
note: "dynamic",
totalChild: "totalChild",
totalGuests: "totalGuests"
};
let updateExpression='set';
let ExpressionAttributeNames={};
let ExpressionAttributeValues = {};
for (const property in Item) {
updateExpression += ` #${property} = :${property} ,`;
ExpressionAttributeNames['#'+property] = property ;
ExpressionAttributeValues[':'+property]=Item[property];
}
console.log(ExpressionAttributeNames);
updateExpression= updateExpression.slice(0, -1);
const params = {
TableName: TABLE_NAME,
Key: {
booking_attempt_id: item.booking_attempt_id,
},
UpdateExpression: updateExpression,
ExpressionAttributeNames: ExpressionAttributeNames,
ExpressionAttributeValues: ExpressionAttributeValues
};
return dynamo.update(params).promise().then(result => {
return result;
})
}
这正是AWS所说的。DynamoDB。DocumentClient的更新
方法不起作用。
关于如何在节点中使用AWS SDK for JavaScript的更新
方法,这里已经有一个示例代码。js。
例如:
'use strict';
const aws = require('aws-sdk');
// It is recommended that we instantiate AWS clients outside the scope of the handler
// to take advantage of connection re-use.
const docClient = new aws.DynamoDB.DocumentClient();
exports.handler = (event, context, callback) => {
const params = {
TableName: "MYTABLE",
Key: {
"id": "1"
},
UpdateExpression: "set variable1 = :x, #MyVariable = :y",
ExpressionAttributeNames: {
"#MyVariable": "variable23"
},
ExpressionAttributeValues: {
":x": "hello2",
":y": "dog"
}
};
docClient.update(params, function(err, data) {
if (err) console.log(err);
else console.log(data);
});
};
如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?
Text 节点的概念 文本节点(Text)代表元素节点(Element)和属性节点(Attribute)的文本内容。如果一个节点只包含一段文本,那么它就有一个文本子节点,代表该节点的文本内容。 通常我们使用父节点的firstChild、nextSibling等属性获取文本节点,或者使用Document节点的createTextNode方法创造一个文本节点。 // 获取文本节点 var textNo
Text节点的概念 Text节点的属性 data wholeText length nextElementSibling previousElementSibling Text节点的方法 appendData(),deleteData(),insertData(),replaceData(),subStringData() remove() splitText(),normalize() Docu
负载均衡集群中的节点用于监听负载均衡实例,并将客户端的请求根据监听和转发规则将其转发给后端服务器。 负载均衡集群中的节点用于监听负载均衡实例,并将客户端的请求根据监听和转发规则转发给后端服务器。 同一个集群下可以有多个转发节点,但同一时刻只有一个节点作为Master节点提供转发服务。属于一个集群的节点的VRRP路由ID必须相同。 节点生命周期管理: 新建节点:设置节点的配置参数。 部署节点:将节点
节点是Pod的实际运行环境。 该页面仅显示在云管平台创建的Kubernetes集群的节点信息。 一个Kubernetes集群由1~3个控制节点和n个计算节点组成。节点是Pod的实际运行环境。 控制节点(controlplane):即Master节点,由三个紧密协作的独立组件组合而成,它们分别是负责API服务的kube-apiserver、负责调度的kube-scheduler,以及负责容器编排的k
所以我环顾了一下网络,在stackoverflow中有几个问题是定义: 通常,内部节点是任何不是叶子的节点(没有子节点) 非叶/非末端/内部节点-至少有一个度不等于0的子节点或后代节点 据我所知,它是一个节点,而不是一片叶子。 我即将得出结论,根也是一个内部节点,但它的定义似乎有些模糊,如图所示: 二元搜索树中的“内部节点”是什么? 正如这张精彩的图片所示,内部节点是位于树根和树叶之间的节点 如果
在本章中,我们将详细介绍XPath表达式,其中包括常见的节点类型,XPath定义和句柄。 序号 节点类型 描述 1 Root XML文档的根元素节点。 2 Element 元素节点。 3 Text 元素节点的文本。 4 Attribute 元素节点的属性。 5 Comment 注释
GitBooks为插件提供了不同的节点 API和上下文。这些API可以根据使用的GitBook版本,你的插件应该在package.json中指定engines.gitbook字段。 Book实例 Book接口是GitBook的中心点,它集中了所有的访问读取方法。 //从book.json读取配置 var value = book.config.get('title','Default Value'