[英]Insert vertex into local Cosmos DB Emulator using Gremlin Console
[英]Migrating Orient Vertex to Cosmos DB using gremlin query
所以我有一个orient 2.0.0 db
,我想将此db
移到cosmos db
。 我正在使用的技术是.Net
,所以我不能使用Java和其他更丰富的驱动程序。
我在迁移过程中面临的主要问题是,我的东方顶点包含作为对象的属性。 因此,有一种方法可以使用gremlin查询将对象作为属性添加到cosmos db中。
tinkerpop doc和gremlin的Azure Cosmos DB Docs上的示例均显示仅添加简单数据类型。
据我所知,目前不支持使用gremlin查询将对象作为属性添加到cosmos db中。
我的工作方式是可以平整物体。 我编写了一个测试演示,您可以在其中添加自己的逻辑。
以下是我的详细步骤:
1.创建一个C#项目并添加Microsoft.Azure.Graphs SDK,更多详细信息请参考packages.config部分。
2.向项目添加自定义类
public class Custom
{
public string Type { get; set; }
public string Name { get; set; }
}
3.添加一个函数将隐蔽对象添加到Gremlin字符串
public static string CovertToGremlinString(object pObject,string type)
{
var propertyList = new List<string>();
// var dic = new Dictionary<string, string>();
if (pObject == null) return null;
var jobject = JObject.FromObject(pObject);
propertyList.AddRange(pObject.GetType().GetProperties().Select(prop => prop.Name));
var s = propertyList.Aggregate($"g.addV('{type}')", (current, property) => current + $".property('{property}','{jobject[property]})')");
// dic.Add(type, s);
return s;
}
4.添加RunAsync函数,我们还可以从Azure门户获取演示代码
public async Task RunAsync(DocumentClient client)
{
Database database = await client.CreateDatabaseIfNotExistsAsync(new Database { Id = "graphdb" });
DocumentCollection graph = await client.CreateDocumentCollectionIfNotExistsAsync(
UriFactory.CreateDatabaseUri("graphdb"),
new DocumentCollection { Id = "Custom" },
new RequestOptions { OfferThroughput = 1000 });
// Azure Cosmos DB supports the Gremlin API for working with Graphs. Gremlin is a functional programming language composed of steps.
// Here, we run a series of Gremlin queries to show how you can add vertices, edges, modify properties, perform queries and traversals
// For additional details, see https://aka.ms/gremlin for the complete list of supported Gremlin operators
var custom = new Custom
{
Name = "Tom",
Type = "1"
};
var s = CovertToGremlinString(custom, "custom");
Dictionary<string, string> gremlinQueries = new Dictionary<string, string>
{
{"Cleanup", "g.V().drop()"},
{"AddVertex 1", s}
};
foreach (KeyValuePair<string, string> gremlinQuery in gremlinQueries)
{
Console.WriteLine($"Running {gremlinQuery.Key}: {gremlinQuery.Value}");
// The CreateGremlinQuery method extensions allow you to execute Gremlin queries and iterate
// results asychronously
IDocumentQuery<dynamic> query = client.CreateGremlinQuery<dynamic>(graph, (string) gremlinQuery.Value);
while (query.HasMoreResults)
{
foreach (dynamic result in await query.ExecuteNextAsync())
{
Console.WriteLine($"\t {JsonConvert.SerializeObject(result)}");
}
}
Console.WriteLine();
}
5.在本地测试。
string endpoint = ConfigurationManager.AppSettings["Endpoint"];
string authKey = ConfigurationManager.AppSettings["AuthKey"];
using (DocumentClient client = new DocumentClient(
new Uri(endpoint),
authKey,
new ConnectionPolicy { ConnectionMode = ConnectionMode.Direct, ConnectionProtocol = Protocol.Tcp }))
{
Program p = new Program();
p.RunAsync(client).Wait();
}
packages.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Azure.DocumentDB" version="1.14.0" targetFramework="net452" />
<package id="Microsoft.Azure.Graphs" version="0.2.0-preview" targetFramework="net452" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="1.1.0" targetFramework="net452" />
<package id="Microsoft.CodeAnalysis.Common" version="1.3.0" targetFramework="net452" />
<package id="Microsoft.CodeAnalysis.CSharp" version="1.3.0" targetFramework="net452" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />
<package id="System.Collections" version="4.0.0" targetFramework="net452" />
<package id="System.Collections.Immutable" version="1.1.37" targetFramework="net452" />
<package id="System.Diagnostics.Debug" version="4.0.0" targetFramework="net452" />
<package id="System.Globalization" version="4.0.0" targetFramework="net452" />
<package id="System.Linq" version="4.0.0" targetFramework="net452" />
<package id="System.Reflection.Metadata" version="1.2.0" targetFramework="net452" />
<package id="System.Resources.ResourceManager" version="4.0.0" targetFramework="net452" />
<package id="System.Runtime" version="4.0.0" targetFramework="net452" />
<package id="System.Runtime.Extensions" version="4.0.0" targetFramework="net452" />
<package id="System.Threading" version="4.0.0" targetFramework="net452" />
</packages>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.