【问题标题】:Unable to retrieve from and Update entities of a datastore table无法从数据存储表的实体中检索和更新实体
【发布时间】:2018-02-12 17:07:41
【问题描述】:

我是 Google Cloud Datastore (NoSQL db) 的新手。我正在使用 C# 开发一个 Web 应用程序,我已通过设置 GOOGLE_APPLICATION_CREDENTIALS 成功为其配置了谷歌数据存储 API 的身份验证。

我还可以在 Datastore 种类中插入数据(实体)(我认为“种类”指的是 Google 中的表格)。但是,我无法根据检索来检索实体,例如,我想从名为“Task”的类型中检索 Datastore 中的实体,其中名为“word”的列中包含“hello”一词。

我还想知道是否可以将数据类型为“字符串”的列保留为键列(如 SQL 数据库表中的主键列)。我还需要有关如何更新特定实体的列/属性的帮助。

                string projectId = "xyz";
                DatastoreDb db = DatastoreDb.Create(projectId);
                Query query = new Query("Task")
                {
                    Filter = Filter.Equal("word", "hello")

                };

                DatastoreQueryResults  dres = db.RunQuery(query);

【问题讨论】:

    标签: c# .net google-app-engine nosql datastore


    【解决方案1】:

    首先,Cloud Datastore 中的 kind 确实相当于 SQL 中的 table。除此之外,每个实体都有一个唯一标识符,其中包括一个键名字符串和一个数字 ID(整数)。

    如果要检索特定实体,可以根据该实体的键使用Lookup function,如下所示:

    Entity task = _db.Lookup(_sampleTask.Key);
    

    如果您想检索多个实体,这也适用:

    var keys = new Key[] { _keyFactory.CreateKey(1), _keyFactory.CreateKey(2) };
    var tasks = _db.Lookup(keys[0], keys[1]);
    

    要更新特定实体,您可以修改其属性,然后使用与之前相同的密钥进行存储:

    _sampleTask["priority"] = 5;
    _db.Update(_sampleTask);
    

    这个link 对于了解如何将 Cloud Datastore 与 .NET 和 C# 一起使用非常有用。它包括一个基于 Datastore 构建书架并将其部署到 App Engine 的教程。

    至于使用什么作为键,Datastore 使用祖先结构,就像文件系统目录一样。可以将一个实体设置为另一个实体的子实体,后者将成为其父实体,这可以一直持续到创建包含祖先和子实体的完整结构为止。

    这是来自具有祖先的实体的键的示例:

    [User:alice, TaskList:default, Task:sampleTask]
    

    这是没有父实体的根实体的键:

    [User:alice]
    

    有关祖先路径的更多信息,请查看此link

    【讨论】:

      【解决方案2】:

      在 GCP Web 控制台中,您可以直接在 sql 中运行查询,从那里您可以快速测试查询是否返回预期结果。

      Datastore 需要先创建索引,然后才能对它们进行查询,当您从 Web 控制台运行查询时,您会了解更多相关信息。

      如果您在 Web 控制台上看到结果,但在以编程方式查询时无法检索,您可以检查 GCP 日志是否有任何异常来调试问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-24
        • 2014-12-30
        • 1970-01-01
        • 2019-10-04
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多