我是Google Cloud Datastore(NoSQL db)的新手。我正在使用C#开发一个Web应用程序,我已通过设置GOOGLE_APPLICATION_CREDENTIALS为Google Datastore API成功配置了身份验证。
我也能够在数据存储区中插入数据(实体)(我认为"种类"指的是Google中的表格)。但是,我无法根据检索检索实体,例如,我想从一个名为" Task"的类中检索来自数据存储区的实体。其中一列名为" word"有"你好"在它。
我还想知道我是否可以保留一个数据类型为" string"的列。作为键列(如SQL数据库表中的主键列)。我还需要帮助我如何更新特定实体的列/属性。
string projectId = "xyz";
DatastoreDb db = DatastoreDb.Create(projectId);
Query query = new Query("Task")
{
Filter = Filter.Equal("word", "hello")
};
DatastoreQueryResults dres = db.RunQuery(query);
答案 0 :(得分:0)
首先,Cloud Datastore中的一种确实相当于SQL中的表。除此之外,每个实体都有一个唯一的标识符,其中包括一个键名字符串和一个数字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对于了解如何在.NET和C#中使用Cloud Datastore非常有用。它包括一个用于构建基于Datastore的书架并在App Engine中部署它的教程。
对于要用作密钥的内容,Datastore使用祖先结构,就像文件系统目录一样。一个实体可以设置为另一个实体的子实体,成为其父实体,这可以继续,直到用祖先和子项创建完整结构。
这是来自具有祖先的实体的密钥的示例:
[User:alice, TaskList:default, Task:sampleTask]
这是根实体的关键,它没有父母:
[User:alice]
有关祖先路径的详细信息,请查看此link。
答案 1 :(得分:0)
在GCP Web控制台中,您可以直接在sql中运行查询,从那里可以快速测试查询是否返回预期结果。
数据存储区要求先创建索引,然后才能从Web控制台查询索引,然后再运行查询,您将了解更多信息。
如果您在Web控制台上看到结果,但是在以编程方式查询时无法检索到结果,则可以检查GCP日志中是否有任何异常,以调试问题。