我们的应用程序当前正在MongoDb上运行。我们的计划是使其与数据存储一起使用。在我们的应用程序中,有一些API调用,我们不知道其响应的结构。因此,我们使用动态类型。我们得到响应并将其原样发送给Mongodb。
据我们检查,Google.Cloud.Datastore.V1 .Net SDK促使开发人员使用结构化类型。我们必须创建一个具有预定义键名的具有某些属性的实体。
如下所示:
MapField<string, Value> fields = new MapField<string, Value>();
fields.Add("d1", "string value");
fields.Add("d2", 30);
fields.Add("d3", 55);
var entity = new Entity
{
Key = key,
Properties = { fields }
};
我已经尝试过的是将API响应设置为字段。不幸的是,它最终将响应保存为字符串。
反正有实现吗?
答案 0 :(得分:0)
我认为,如果您考虑到不需要使用Properties
实体密钥,则会简化问题。
根据您的示例,我执行了以下操作。请注意,您并不是我所见的C#
专家,但这确实可以解决问题:
string projectId = "MY-PROJECT";
string kind = "Task";
string name = "samplekey1";
DatastoreDb db = DatastoreDb.Create(projectId);
KeyFactory keyFactory = db.CreateKeyFactory(kind);
Key key = keyFactory.CreateKey(name);
var request = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}");
var entity = new Entity()
{
Key = key,
};
foreach(JProperty property in request.Properties())
{
entity[property.Name] = property.Value.ToString();
}
using (DatastoreTransaction transaction = db.BeginTransaction())
{
transaction.Insert(entity);
transaction.Commit();
};
请注意,这不会保存每个键的值的类型(所有键都是字符串)。如果您不需要每个值的类型(即Int,String ...)供以后使用,那么这不是问题。
但这似乎是最简单的解决方案,它可以完成创建each property with each value的工作。
答案 1 :(得分:0)
在文档Properties and Value Types中查看此页面,特别是名为 Embedded实体的位,它将允许您存储JSON实体,然后查询其子属性,只要它被索引。