GCP Datastore Node库:含长字符串数组的对象正确存储格式
Datastore数组字段排除索引的正确实体结构
我有如下形式的JavaScript对象:
const data = { title: "short string", descriptions: [ "Really long string...", "Really long string..." ] }
其中descriptions数组中的长字符串需要被排除在索引外,但我始终无法确定存储所需的对象格式。当前代码逻辑如下:
const entityToSave = dataToDatastore(data); datastore.save({ key: datastore.key(["TestEntity"]), data: entityToSave })
我只需要知晓entityToSave的正确结构,此前尝试了近20种不同形式,但所有使用excludeFromIndexes的尝试要么抛出字符串过长的错误,要么最终让数组变成Entity类型而非保持原数组结构。另外我能通过GCP管理界面完成该操作,这让我十分困惑。
测试脚本
为方便测试,我提供了一段脚本,只需完成两个步骤即可运行:(1)设置PROJECT_ID;(2)为descriptions数组添加足够长的字符串:
const { Datastore } = require("@google-cloud/datastore"); const PROJECT_ID = null; const data = { title: "short string", descriptions: [ "Really long string...", "Really long string...", ] } const entityToSave = dataToDatastore(data); async function save() { const datastore = new Datastore({ projectId: PROJECT_ID, }); console.log(entityToSave); const entity = { key: datastore.key(["TestEntity"]), data: entityToSave }; datastore.save(entity); } function dataToDatastore(data) { return data } save();
我只需要知晓dataToDatastore函数的正确实现方式,已参考多处文档和讨论尝试多种变体,但均未成功。
正确的dataToDatastore实现
要让数组中的每个长字符串都排除索引,需要将数组中的每个元素包装为包含value和excludeFromIndexes的对象,同时保持数组结构:
function dataToDatastore(data) { return { title: data.title, descriptions: data.descriptions.map(str => ({ value: str, excludeFromIndexes: true })) }; }
这样处理后,descriptions数组中的每个字符串都会被标记为排除索引,既不会触发字符串过长的错误,也能保持数组的原始类型结构。
内容的提问来源于stack exchange,提问作者bstovall
相关产品推荐
相关产品推荐

