我是這個 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" }]}在這里我總結一下我的問題:什么是關鍵類?Key 的路徑是什么,為什么是數組?是id實體的唯一鍵嗎?如何Query通過Key和Id?感謝閱讀,請不要介意我糟糕的英語。
1 回答

智慧大石
TA貢獻1946條經驗 獲得超3個贊
鍵是文檔的唯一標識符。該文檔最好說的:
Cloud Datastore 中的每個實體都有一個唯一標識它的鍵。密鑰由以下組件組成:
實體的命名空間,允許多租戶
該類型的實體,它歸類它Cloud Datastore查詢的目的
單個實體的標識符,可以是
一個鍵名字符串
整數數字 ID
可選的祖先路徑在云存儲中定位的實體層次結構中的可選路徑祖先定位云存儲層次結構中的實體
“祖先路徑”部分是Path
屬性中有數組的原因- 完全限定的鍵是一個命名空間,后跟一系列路徑元素,每個元素由一個種類和“整數 ID”或“字符串名稱”部分組成。
例如,您可能有一個圖書館應用程序。那有架子和書。忽略命名空間部分,特定書籍可能具有包含以下路徑元素的 ID:
種類=架子;Id=1(數字 ID)
種類=書;名稱=xyz(字符串名稱)
另一種思考方式就像集合和文檔名稱的交替序列,例如“/shelves/1/books/xyz”。這就是Firestore表示其文檔 ID 的方式。
任何一個路徑元素不必是唯一的,但完整的路徑是唯一的。沒有通過“鍵和 ID”進行查詢的真正概念 - 您可以查找完整的鍵(例如DatastoreDb.Lookup
)或包含父鍵作為祖先路徑查詢。
- 1 回答
- 0 關注
- 319 瀏覽
添加回答
舉報
0/150
提交
取消