可选匹配不返回结果

当我在neo4j浏览器(localhost:7474 / browser)中启动这个查询时,

match (s:Song) optional match (sg:SongGroup)-[r:SONGGROUP_SONG]->(s) where id(sg) = 294 return sg.title , s.title 

…我得到这个(sg.title和s.title都有数据)

 sg.title s.title test 3 Shake it off .... ..... 

当我将相同的查询推入nodejs中的此函数(使用npm请求模块)时:

 function cypherQuery(query, params, callback) { request.post({ uri : 'http://localhost:7474/db/data/cypher', json : {query: query, params: params} }, function(err, res, body) { callback(err, body); }); 

…我得到这个:(只有s.title有数据)

 { columns: [ 's.title', 'sg.title' ], data: [ [ 'My forbidden lover', null ], [ 'Step back', null ], [ 'Shake it off', null ], [ 'Two Hearts', null ], [ 'Homelands', null ] ] } 

我已经试过模块neo4j-node和seraph,都给了我相同的结果(sg.title = null)

但是,当我使用邮差,一切都工作。

POST localhost:7474 / db / data / cypher,正文(原始)设置为

 { "query" : "match (s:Song) optional match (sg:SongGroup)-[r:SONGGROUP_SONG]->(s) where id(sg) = {recId} return s.title, sg.title ", "params" : {"recId": 294} } 

任何想法,为什么这在浏览器和邮递员,但不是在节点?

您需要parsingrecId以便它是一个整数,而不是一个string。 (请注意,达到这个结论所需要的信息并不包括在这个页面上,但它是在这个页面上。

当你把它parsing成一个string时,密码试图比较id(sg)"294"相等性,一个是整数,另一个是string。 在JS中工作,但不在Cypher中工作。