我在c#中创建基于位置的应用程序,我正在使用neo4j和neo4j空间插件来处理它。为了与空间插件进行通信,我必须使用它的REST API,因为neo4jClient目前不支持它。现在我想add all the nodes (with location data ie lat, lon) to spatial layer,我需要所有的neo4j节点ID,我的问题是有没有办法通过它的数据(在这种情况下,它的lat / lon)获取先前插入的节点的节点id,或者是否有更好的approch添加节点到空间层?
编辑: 我也使用neo4jClient进行其他插入和检索
答案 0 :(得分:0)
首先,除了通过ID将节点添加到空间之外,没有其他方法。
您可以使用函数has(n.Property)编写一个Cypher查询来检索所有节点ID,例如:
// cypher-query to retrieve node Ids
client.Cypher
.Match("(n:SpatialIndex)")
.Where("has(n.lat)")
.AndWhere("has(n.lon)")
.Return(node => node.Id());
// add existing node to SimplePoint-Layer
public void AddNodeToLayer(long nodeId, string layer)
{
string URINode = string.Format("{0}node/{1}",_client.BaseUrl, nodeId);
string json = string.Format("{{\"layer\":\"{0}\", \"node\":\"{1}\"}}", layer, URINode);
string URIAdd = string.Format("{0}ext/SpatialPlugin/graphdb/addNodeToLayer", _client.BaseUrl);
HTTPCommand(new Uri(URIAdd), json);
}
实际上还有另一个REST端点:addMultipleNodesToLayer。但似乎它还没有推出。我已经问过这个问题,希望很快就会有用。