Neo4j Cypher,不同的查询结果在代码和数据库中

时间:2015-12-29 10:26:46

标签: c# neo4j

我有一个非常奇怪的问题。我有一个查询如下

  var el = _client.Cypher.Match("(map:Map)-[ALSO_AS*0..4]-(alsoas:Map)")
               .Where((MappingNode map) => map.Id == node.Id)
               .Return((map, alsoas) => new
               {
                   node = map.As<MappingNode>(),
                   related = alsoas.CollectAs<MappingNode>()
               }); 
var query = el.Query;
        var result = el.Results.SingleOrDefault();
        return result == null ? null : result.related.ToList();

最终生成以下查询(来自el.Query的takem)

MATCH (map:Map)-[ALSO_AS*0..4]-(alsoas:Map)
WHERE (map.Id = "02E325025AMZZ")
RETURN map AS node, collect(alsoas) AS related    

问题是当我在neo4j的本机命令行中在浏览器中运行查询时,我得到x个结果。当我在c#中运行相同的查询时,结果计数高出10倍。

c#(1个节点,〜3k相关) 数据库(1个节点,~300相关)

我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

对我跳出来的是,看起来你似乎想尝试匹配ALSO_AS关系类型,但由于没有冒号,所以它将其解释为一个变量。应该是这样的:

[:ALSO_AS*0..4]

答案 1 :(得分:0)

所以我解决了这个问题。

public class Dummy {

    public static void main(String[] args) {
        String[] str = { "MSD" ,"EEE", "RSR", "OCL", "SMS","RTS" };
        List<String> list = new ArrayList<>();
        for (int j = 0; j < str.length; j++) {
            String temp = "";
            for (int i = j; i < str.length; i++) {
                temp = temp + " " + str[i];
                list.add(temp);
            }
        }

        for (String string : list) {
            System.out.println(string);
        }
    }
}

这是c#中的解决方案。我所缺少的是收集和适当的关系声明。