我目前正在使用SDN 4和trys执行以下查询:
message1
其中每个节点都有一个公共标签d3.json("india-states.json", function (json) {
india.selectAll("path")
.data(json.features)
.enter().append("path")
.attr("d", path);
var stateText = india.selectAll(".text")
.data(json.features)
.enter()
.append("text");
var arrayStates = [];//this array will hold all the names
var socket = io();
socket.on('tags', function(data){
arrayStates.push(data.message1);//for each input, a new string
stateText.attr("fill", "black")
.attr("transform", function(d) {
var centroid = path.centroid(d);
return "translate(" + centroid[0] + "," + centroid[1] + ")"
})
.attr("text-anchor", "middle")
.attr("dy", ".35em")
.style('fill', 'white')
.text(function(d) {
for(var i = 0; i < arrayStates.length; i++){
if (d.id == arrayStates[i]) {
return arrayStates[i];
}
}
});
});
});
和一个单独的标签@Query("MATCH (n:TNode:{0}) RETURN n")
Collection<TNode> getNodes(String type);
。但是,它总是返回语法错误。我确定查询是正确的,因为它使用Neo4j Web客户端返回节点。
是否发生错误是因为SDN无法通过"TNode"
找到节点?
答案 0 :(得分:3)
这是Cypher的限制,而不是SDN。不支持将标签(或关系类型)作为参数。请参阅this and related feature requests。
您可以使用where子句和labels(n)函数解决此问题:
MATCH (n:TNode)
WHERE {0} in labels(n)
RETURN n
这有一个警告 - 它将遍历MATCH子句匹配的所有节点。在你的情况下有一个:TNode标签可能会解决问题,但通常有简单的MATCH(n)将通过数据库中的所有节点,这将非常慢。
其他选项是手动构建查询并使用org.springframework.data.neo4j.template.Neo4jOperations#queryForObjects来运行查询:
String query = "MATCH (n:TNode:" + type + ") RETURN n"; // ugly, but works, beware of query injections etc..
Collection<TNode> nodes = neo4jOperations.queryForObjects(TNode.class, query, params);