猿问

Google.Cloud.Datastore.V1 中的 Key 是什么

我是这个 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;

    }

}

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


我认为密钥是实体的唯一标识。


如果有误解请纠正我。


我可以通过 Query 获取实体,如下所示:


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)。


该示例显示密钥的结构是:


{

    "partitionId":

    {

        "projectId": "projectId",

        "namespaceId": "namespaceId"

    },

    "path": [

    {

        "kind": "kind",

        "id": "id"

    }]

}

在这里我总结一下我的问题:

  1. 什么是关键类?

  2. Key 的路径是什么,为什么是数组?

  3. id实体的唯一键吗?

  4. 如何Query通过KeyId

感谢阅读,请不要介意我糟糕的英语。


LEATH
浏览 285回答 1
1回答

智慧大石

键是文档的唯一标识符。该文档最好说的:Cloud Datastore 中的每个实体都有一个唯一标识它的键。密钥由以下组件组成:实体的命名空间,允许多租户该类型的实体,它归类它Cloud Datastore查询的目的单个实体的标识符,可以是一个键名字符串整数数字 ID可选的祖先路径在云存储中定位的实体层次结构中的可选路径祖先定位云存储层次结构中的实体“祖先路径”部分是Path属性中有数组的原因- 完全限定的键是一个命名空间,后跟一系列路径元素,每个元素由一个种类和“整数 ID”或“字符串名称”部分组成。例如,您可能有一个图书馆应用程序。那有架子和书。忽略命名空间部分,特定书籍可能具有包含以下路径元素的 ID:种类=架子;Id=1(数字 ID)种类=书;名称=xyz(字符串名称)另一种思考方式就像集合和文档名称的交替序列,例如“/shelves/1/books/xyz”。这就是Firestore表示其文档 ID 的方式。任何一个路径元素不必是唯一的,但完整的路径是唯一的。没有通过“键和 ID”进行查询的真正概念 - 您可以查找完整的键(例如DatastoreDb.Lookup)或包含父键作为祖先路径查询。
随时随地看视频慕课网APP
我要回答