gpt4 book ai didi

node.js - Google 数据存储区无法更新实体

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:07 25 4
gpt4 key购买 nike

我在从 Google 数据存储区检索实体时遇到问题。这是我的代码:

    async function pushTaskIdToCurrentSession(taskId){

console.log(`Attempting to add ${taskId} to current Session: ${cloudDataStoreCurrentSession}`);

const transaction = datastore.transaction();
const taskKey = datastore.key(['Session', cloudDataStoreCurrentSession]);

try {
await transaction.run();

const [task] = await transaction.get(taskKey);
let sessionTasks = task.session_tasks;
sessionTasks.push(taskId);
task.session_tasks = sessionTasks;

transaction.save({
key: taskKey,
data: task,
});
transaction.commit();
console.log(`Task ${taskId} added to current Session successfully.`);

} catch (err) {
console.error('ERROR:', err);
transaction.rollback();
}
}

taskId是另一个实体的字符串 ID,我想将其存储在名为 session_tasks 的属性数组中.

但事情还没有那么远。此行之后:

const [task] = await transaction.get(taskKey);

错误是task未定义: ERROR: TypeError: Cannot read property 'session_tasks' of undefined
at pushTaskIdToCurrentSession

从这段代码中有什么显而易见的事情吗?

更新:

用这个代替: const task = await transaction.get(taskKey).catch(console.error);给我一个任务对象,但它似乎在数据存储上创建一个新实体: datastore entity error

我也收到此错误:

(node:19936) UnhandledPromiseRejectionWarning: Error: Unsupported field value, undefined, was provided.
at Object.encodeValue (/Users/.../node_modules/@google-cloud/datastore/build/src/entity.js:387:15)

这表明该数组不受支持?

最佳答案

这里的问题是数据存储支持两种ID。

  • name= 开头的 ID 是自定义 ID。它们被视为字符串
  • id= 开头的 ID 是自动生成的数字 ID,并被视为整数

当您尝试更新数据存储区中的值时,cloudDataStoreCurrentSession 被视为字符串。由于 Datastore 找不到已创建的具有该自定义名称的实体键,因此它创建了该实体键并添加了 name= 以指定它是自定义名称。因此,您必须将 cloudDataStoreCurrentSession 作为整数传递才能正确保存数据。

如果我理解正确,您正在尝试使用特定的实体种类和实体键从数据存储区加载字符串数组列表。然后,您再添加一项任务并更新特定实体种类和实体键的数据存储区的值。

我创建了与您相同的案例场景,并自己编写了一些代码。在 this GitHub code 中,您会发现我的示例执行以下操作:

  1. 转至数据存储区实体类型 session
  2. 从实体 key id=5639456635748352检索所有数据(例如)。
  3. 从键session_tasks获取数组列表。
  4. 添加从函数参数传递的新任务。
  5. 执行数据存储区事务并更新值。

所有步骤都记录在代码中,并且有很多注释准确解释了代码的工作原理。还有两个 currentSessionID 示例。一种用于自定义名称,另一种用于自动生成的 ID。您可以测试代码以了解其用法并根据您的需要进行修改。

关于node.js - Google 数据存储区无法更新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56432083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com