首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4jClient测试节点是否存在的最佳方法是获取NodeReference或创建

Neo4jClient测试节点是否存在的最佳方法是获取NodeReference或创建
EN

Stack Overflow用户
提问于 2013-10-09 15:48:23
回答 2查看 1.1K关注 0票数 2

这就是我的问题。我在我的Neo4j中插入人员列表(具有唯一标识符),并创建他们之间的关系。

要知道此人是否已经存在于Neo4j中,然后创建/更新它,最有效的方法是什么?由于Neo4jclient不支持标签,是将类型信息存储为节点的属性更有效,还是将同一类型的所有节点链接到该类型的“根节点”更好?

先谢谢你,

埃默里

EN

回答 2

Stack Overflow用户

发布于 2013-10-10 04:51:56

Neo4jClient确实支持标签,通过标准密码。(内部版本1.0.0.602及更高版本。)

代码语言:javascript
复制
graphClient
    .Merge("(p:Person {jim}")
    .WithParam("jim", new Person { Name = "Jim" })
    .ExecuteWithoutResults();

您也可以退还它:

代码语言:javascript
复制
var jimNode = graphClient
    .Merge("(p:Person {jim}")
    .WithParam("jim", new Person { Name = "Jim" })
    .Return(p => p.Node<Person>())
    .Results
    .Single();
票数 1
EN

Stack Overflow用户

发布于 2013-10-09 16:27:38

您可以添加到索引并执行索引查询,因此:

创建索引:

代码语言:javascript
复制
if (!client.CheckIndexExists("Persons", IndexFor.Node))
    client.CreateIndex("Persons", new IndexConfiguration {Provider = IndexProvider.lucene, Type = IndexType.exact}, IndexFor.Node);

添加人员(具有索引条目)

代码语言:javascript
复制
var chris = new Person {Name = "Chris", Id = DateTime.Now.Ticks};
client.Create(chris, null, GetIndexEntries(chris));

其中GetIndexEntries看起来像:

代码语言:javascript
复制
private static IEnumerable<IndexEntry> GetIndexEntries(Person person)
{
    var indexEntries = new List<IndexEntry>
    {
        new IndexEntry
        {
            Name = "Persons",
            KeyValues = new List<KeyValuePair<string, object>>
            {
                new KeyValuePair<string, object>("name", person.Name),
                new KeyValuePair<string, object>("id", person.Id)
            }
        }
    };

    return indexEntries;
}

然后查询索引:

代码语言:javascript
复制
var indexQuery = 
    client.Cypher
    .Start(new {n = Node.ByIndexLookup("Persons", "name", "Chris")})
    .Return<Node<Person>>("n");
var results = indexQuery.Results.ToList();

Console.WriteLine("Found {0} results", results.Count());
foreach (var result in results)
    Console.WriteLine(result.Data.Id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19266023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档