【发布时间】:2026-01-29 05:40:01
【问题描述】:
我可能遗漏了一些明显的东西,但我找不到一种方法来存储带有后代的 JSON 对象,从而使 Datastore DB 具有可查询的实体层次结构。示例代码:
const Datastore = require('@google-cloud/datastore');
const datastore = new Datastore({
projectId: 'MY_PROJECT_ID',
});
const ot1 = {
// The kind and ID for the new entity
key: datastore.key(['OT', '1']),
data: {
obj: [
{
var1: 'var1',
var2: 'var2',
},
{
var3: [{obj2:'var3'}, 'var5'],
var4: 'var4',
},
] // obj
} // data
};
datastore.save(ot1);
如果我现在检查我的数据存储区,它包含一个 Array 类型的实体“obj”(如预期的那样),但值是一个表示该数组的大 JSON blob,即我无法深入到后代对象(它们是 @987654322 @、obj[1]、obj[1].var3 和 obj[1].var3[0]) 来自 Datastore 控制台(而使用 AWS DynamoDB 和相同的 JSON,我可以向下钻取——就好像它自动处理从 JS 对象到 DB 格式的转换一样)。然而,文档表明实体的父实体在创建实体后无法更改,因此必须在子实体之前创建父实体。似乎 API 要求我分多个步骤保存:
- 保存根对象,列表为空
- 保存根的每个孩子,将他们的父母设置为根(
obj);不清楚如何将每个孩子添加到数组中;obj[1]将有空数组作为var3属性值 - 保存
obj[1].var3数组的每个元素,将它们的父元素设置为obj[1];关于数组的同样问题
这是一个大量的工作,肯定有一个库函数可以自动执行此操作,但我找不到。而且我不确定这在 Datastore 控制台中会是什么样子,我怀疑你最终会得到 4 个对象,即层次结构只能通过观察父属性来间接知道。
更新:我怀疑答案是使用像 js-data 这样的 ORM。
【问题讨论】:
标签: json node.js google-cloud-datastore google-api-nodejs-client