gpt4 book ai didi

java - 为什么 Cypher 查询在 average 函数中返回空值?

转载 作者:行者123 更新时间:2023-11-30 08:54:46 25 4
gpt4 key购买 nike

我正在使用 Neo4j (2.2.0 M2) 嵌入式图形应用程序。为了查询这个图,我使用 Cypher 方式,使用 GraphDatabaseService 类及其方法 execute(query, params),返回一个 org.neo4j.graphdb.Result 实例。问题是当我在查询中使用聚合函数 (avg) 时:

MATCH 
(e:Person {person_id: {id} }) <-[:ASIGNED_TO]-(t:Task)
WHERE t.start_date >= {cuttof_date}
RETURN AVG(t.estimated_time) as avgte

为了简要理解这个查询:id 和 cuttof_date 是我放在 Mapset 中的参数,最后一个是 UTC(长)日期并且具有可比性。使用 Neo4j 浏览器管理器并为指定参数赋予一些值的查询结果如下:

平均

6.166666666666667

在 665 毫秒内返回 1 行。

完美!现在,当我期望在 Java 代码中使用 Cypher 得到相同的结果时(我避免了“尝试”和“使用资源”):

    //Same params
int id = 187;
long longDate = 1357016400000L;

Map<String,Object> params= new HashMap<>();
params.put("id", id);
params.put("cuttof_date", longDate);

//same query
String query = "MATCH"+
"(e:Person {person_id: {id} }) <-[:ASIGNED_TO]-(t:Task) " +
"WHERE t.start_date >= {cuttof_date} " +
"RETURN AVG(t.estimated_time) as avgte";

GraphDatabaseService gdbs = new
GraphDatabaseFactory().
newEmbeddedDatabase(DB_NAME) ;

Result result = gdbs.execute(query, params);
Map<String, Object> firstRow = result.next();
Object avgteObject = firstRow.get("avgte");

//Using the most basic transformation: as String
System.out.println("AVGTE: "+String.valueOf(avgteObject));

结果是:“AVGTE:空”。这怎么可能!?我还使用了其他类,如 ExtendedExecutionResultorg.neo4j.cypher package 中的 ExecutionResult,但也返回相同的输出。问题不在于查询,它工作得很好,所以我认为是在使用 Cypher 类时,它不会加载聚合函数的值。

有什么想法吗??

最佳答案

也许您的数据库中有一个没有estimated_time 属性的节点?

尝试返回tt.estimated_time查看原始数据

关于java - 为什么 Cypher 查询在 average 函数中返回空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29297494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com