【问题标题】:Automatic ID for Datastore Embedded Entity (NodeJS Client)数据存储嵌入式实体的自动 ID(NodeJS 客户端)
【发布时间】:2018-04-16 10:39:38
【问题描述】:

相关:Automatic ID for embedded entity

我希望在 NodeJS 中做与 Java 中链接帖子中所做的相同的事情,但鉴于库的 Node 版本中没有 Entity 或 EmbeddedEntity 类型(据我所知),我我不知道该怎么做。我正在保存一组嵌入式实体,每个实体都有 2 个键。我希望能够在保存键时自动生成一个值,我们称之为embeddedEntityKey,而不用担心在我的代码中生成随机值。可能吗?

【问题讨论】:

    标签: node.js google-app-engine google-cloud-datastore


    【解决方案1】:

    我猜你在这里混淆了两个术语。 在 java 中,很多工作都是由客户端库完成的,包括丰富的数据存储映射技术。在节点中,有两种实体可以存储在父实体中。

    1. 您可以指定一个属性并将对象放入其中。在这种情况下,您 只会将普通对象写入属性,而这不会 成为并嵌入实体。 示例:

      db.save({ 
          key: db.key(["SomeKind"]), 
          data: { 
              object: {
                  someVal: 1
              }
          }
      });
      
    2. 您需要指定父 ID 才能创建真正的嵌入式实体。

      db.save({ 
          key: db.key({
              path: ["SomeParentKind", "ParentIdOrName", "EmbededEntityKind"]
          }), 
          data: {
              someVal: 1
          }
      });
      

    简而言之,在 Node.js 中嵌入的实体创建机制是不同的。 在这里,您可以找到有关在 Node.js 环境中使用数据存储的更多详细信息。 https://cloud.google.com/datastore/docs/concepts/entities#datastore-basic-entity-nodejs

    具体来说,查看文档中的祖先部分。 https://cloud.google.com/datastore/docs/concepts/entities#ancestor_paths

    更新 2

    在 Node.js 中使用 Datastore 保存可能性。

    获取后保存

    db.get(db.key(["MyKind", db.int("123123123")]))
        .then(results => {
            let entity = results[0];
            entity.prop = 1;
            return db.save(entity);
        });
    

    使用写入键初始保存到对象中

    let object = {
        prop: 1,
        [db.KEY]: db.key(["MyKind"])
    };
    
    db.save(object);
    

    将键作为保存参数进行初始保存

    let object = {
        prop: 1
    };
    
    let key = db.key(["MyKind"]);
    
    db.save({
        key: key,
        data: object
    });
    

    【讨论】:

    • 谢谢,这绝对是信息丰富的(我认为我错误地嵌入了实体),但是,我主要只是想在某些字段上自动生成一个 ID 值,我在文档中看到提供不完整的密钥应该这样做。就我而言,当我写 key = datastore.key('article_id') 时,我收到错误 Error: Key path element must not be incomplete: [article_id: ]
    • Datastore 会自动生成。您尝试使用该键执行哪个操作?
    • 我将密钥放入一个对象中,该对象附加到我的用户对象上存在的数组中。然后我运行datastoreClient.update(userEntity)
    • 因此,您需要先创建这些实例,或者自己为密钥提供一些值。数据存储无法存储不完整的密钥。存储不完整的密钥是没有意义的。顺便说一句,您如何将密钥附加到用户实体?也可能有问题。
    • 我的 userEntity 是一种预定义类型,我使用 OAuth ID 作为键。奇怪的是,文档说如果您使用具有不完整键的实体运行保存/更新,键值将由 GCD 自动生成,这正是我想要的!
    猜你喜欢
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2019-01-20
    相关资源
    最近更新 更多