【问题标题】:What is Key in Google.Cloud.Datastore.V1Google.Cloud.Datastore.V1 中的密钥是什么
【发布时间】:2018-11-29 04:23:45
【问题描述】:

我是这个 nuget 包的新手,对 Key 类感到困惑。

这是我基于Google.Cloud.Datastore.V1 文档的代码库:

public long InsertMessage<T>(T iEntity) where T : IEntity<T>
{
    var keyFactory = _db.CreateKeyFactory(Kind);
    var entity = iEntity.ToEntity();
    entity.Key = keyFactory.CreateIncompleteKey();

    using (var transaction = _db.BeginTransaction())
    {
        transaction.Insert(entity);
        var commitResponse = transaction.Commit();
        var insertedKey = commitResponse.MutationResults[0].Key;
        Logger.Info($"Inserted key: {insertedKey}");
        return insertedKey.Path[0].Id;
    }
}

我所做的只是创建一个实体并创建一个不完整的密钥,发送到服务器,然后从服务器取回填充的密钥。

我认为 key 是实体的唯一身份

如有误解请指正。

我可以通过查询获取实体如下:

var query = new Query(Kind)
{
    Filter = Filter.Equal("key", key),
    Order = { { "created", PropertyOrder.Types.Direction.Ascending } }
};
foreach (var entity in _db.RunQueryLazily(query))
{
    list.Add(entity);
}

但我不知道如何使用插入时获得的密钥来获取Filter.Equal("key", key) 的唯一实体。

示例显示Key的结构是:

{
    "partitionId":
    {
        "projectId": "projectId",
        "namespaceId": "namespaceId"
    },
    "path": [
    {
        "kind": "kind",
        "id": "id"
    }]
}

我在这里结束我的问题:

  1. Key 类有什么用?
  2. 什么是 Key 的路径,为什么是数组?
  3. id 是实体的唯一键吗?
  4. 如何通过KeyIdQuery

感谢您的阅读,请不要介意我的英语不好。

【问题讨论】:

    标签: c# google-cloud-platform google-cloud-datastore


    【解决方案1】:

    密钥是文档的唯一标识符。 documentation 说得最好:

    Cloud Datastore 中的每个实体都有一个唯一标识它的。密钥由以下组件组成:

    • 实体的命名空间,允许多租户
    • 实体的种类,用于对 Cloud Datastore 查询进行分类
    • 单个实体的标识符,可以是
      • 一个键名字符串
      • 一个整数数字ID
    • 一个可选的祖先路径,用于定位 Cloud Datastore 层次结构中的实体 在 Cloud Datastore 层次结构中定位实体的可选祖先路径

    “祖先路径”部分是Path 属性中有一个数组的原因 - 完全限定键是一个命名空间,后跟一系列path elements,每个都包含一个种类和“整数 ID”或“字符串名称”部分。

    例如,您可能有一个库应用程序。那有书架和书籍。忽略命名空间部分,特定书籍的 ID 可能包含以下路径元素:

    • 种类=架子; Id=1(数字 ID)
    • 种类=书籍; Name=xyz(字符串名称)

    另一种思考方式是集合和文档名称的交替序列,例如“/shelves/1/books/xyz”。这就是Firestore 表示其文档 ID 的方式。

    任何一个路径元素都不必是唯一的,但完整的路径是唯一的。没有通过“键和 ID”查询的真正概念 - 您可以查找完整的键(例如 DatastoreDb.Lookup)或包含父键作为祖先路径查询。

    【讨论】:

    • 既然key是唯一的,我不能用它来获取唯一的文档吗?
    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 2013-09-15
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2016-09-10
    相关资源
    最近更新 更多