使用 Bolt 使用 neo4jclient 批量插入节点

Batch insert nodes with neo4jclient using Bolt

我正在尝试使用 neo4jclient 将 N 个节点导入到 neo4j。我正在使用托管在 Azure 中的 neo4j 集群,因此我必须使用 Bolt 协议。所以我用的是neo4jclient的RC1

基于我将在下面包含的示例,我有以下代码:

BoltGraphClient client =
    new BoltGraphClient(new Uri("bolt://myserver:7687"), "neo4j", "mypwd");
client.Connect();

var nodes = new List<myNode>()
   {
      new myNode()
      {
         id = "a",
         patientKey = "aaa",
         patient_fname = "John",
         patient_lname = "Doe"
      },
      new myNode()
      {
         id = "b",
         patientKey = "bbb",
         patient_fname = "Jane",
         patient_lname = "Doe"
      }
  };

client.Cypher
    .Create("(n:Node {nodes})")
    .WithParams(new { nodes })
    .ExecuteWithoutResults();

我收到以下错误:

Newtonsoft.Json.JsonSerializationException occurred HResult=0x80131500 Message=Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'System.Collections.Generic.Dictionary`2[System.String,System.Object]' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly. To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.

我相信我遵循了以下应该有效的答案:

我正在使用 Neo4j 3.2.6、Neo4jClient 3RC1 和 c# 4.6

如果一切正常,那么我将为 Neo4jClient 创建一个缺陷。

Neo4jClient 3.0.0-RC2 刚刚发布。我无法获得您特别需要 运行 的查询,所以我将使用它,但我从 Neo4jClient 和官方 Neo4j.Driver 中得到相同的错误,所以我假设这是一个意味着 Cypher 不再有效的变化。

但是,您会发现 RC2 您可以这样做:

client.Cypher
    .Unwind(nodes, "node")
    .Create("(n:Node)")
    .Set("n = node")
    .ExecuteWithoutResults();

这就是我做你想做的事情的方式。