首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-like在Neo4j中的行为(.NET驱动程序)?

-like在Neo4j中的行为(.NET驱动程序)?
EN

Stack Overflow用户
提问于 2022-10-06 17:48:54
回答 2查看 33关注 0票数 0

我很抱歉,如果我问的是一个非常基本和天真的问题,但我已经找到了答案,但一直未能找到它。

我是Neo4j和图形数据库的新手,在处理关系数据库之后。例如,在关系数据库中,我将获得一个语句句柄,在数据库上执行一个查询,然后能够对语句句柄逐行进行操作,也就是说,具有一个“get perform”函数,以便每次从查询结果中检索一行。我可以在结果上工作,而不用一次把整件事吞进记忆中。

现在,我正在使用.NET/C#中的Neo4j (代码不是我创建的),而且我还没有找到一种方法来做到这一点。例如,该守则包括:

代码语言:javascript
复制
using (var session = connection.GetDriver().Session())
{
    result = session.ReadTransaction(tx => tx.Run(query).ToList());
}

并将整个查询结果检索到result中,即使这需要很长时间或溢出可用内存。

有没有办法用-like进行“获取”Neo4j操作?在我的搜索中,我发现大多数人推荐使用SKIPLIMIT执行查询,这并不是我想要的。

EN

回答 2

Stack Overflow用户

发布于 2022-10-25 23:35:14

不幸的是,这不是一件真正的事情。如果您将Cypher与SQL进行比较,您可能会知道它为什么不能真正工作。在SQL中,您可以让它返回您选择的所有内容,或者添加一个限制子句。这里很相似。

如果您使用的是python熊猫或pyspark之类的东西,您可以将查询结果放入dataframes,但是仍然需要很长的时间或溢出现有的内存。

您可以使用apoc.export函数对输出进行批处理,这可能有助于解决内存问题。有关选项,请参见https://neo4j.com/labs/apoc/4.3/export/

票数 0
EN

Stack Overflow用户

发布于 2022-10-27 19:49:13

我找到了一种类似的行为方式。这个例子在Python (API文档)中,但它与.NET (cf )的工作方式类似。IResult接口)和其他驱动程序。

代码语言:javascript
复制
from neo4j import GraphDatabase

def do_tx(tx, cypher):
    print("do_tx:", [tx, cypher])
    result = tx.run(cypher)
    print("result:", result)
    values = []
    for record in result:  # This is equivalent to "fetchrow"
        print("record in result:", record)
        # Do whatever I want here with the incremental result
        for (value in record.values()):
            values.append(value) # Store the retrieved value
        summary = result.consume()
        return values

db = GraphDatabase(uri, auth=(user, password))
with db.session(database="neo4j") as session:
    query = "MATCH (r:Risk) RETURN DISTINCT r.score"
    result = session.write_transaction(do_tx, query)
    print(result)

write_transaction()用一个neo4j.work.transaction.Transaction对象和Cypher查询调用do_tx()tx.run(cypher)运行Cypher查询并获取一个neo4j.work.result.Result对象。结果对象是可迭代的,并给出记录对象。

在我上面的C#代码中也可以这样做:

代码语言:javascript
复制
using (var session = driver.Session())
{
    string query = "MATCH (r:Risk) RETURN DISTINCT r.score";
    var scores = session.ReadTransaction(tx => {
        List<string> results;
        var result => tx.Run(query);
        foreach (var record in result)
        {
            foreach (KeyValuePair<string, object> kvp in record.Values)
            {
                Console.WriteLine(kvp.Key + ": " + kvp.Value);
                results.Add(kvp.Value.ToString());
            }
        }
        return results;
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73978067

复制
相关文章

相似问题

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