我一直在使用NEO4j数据库来处理最近的项目。
最近,我们注意到Cypher查询的运行速度比Gremlin快,所以我们决定转换查询。我们使用.Net图形客户端运行查询。
有一个Gremlin查询我无法转换为Cypher。
---- Gremlin(这可以生成Node(CustomerNode)的结果....应该是CustomerNode的括号,但编辑器不会接受它)
var results2 = graphClient.RootNode
.Out<ApplicationNode>("HasApplications")
.OutE("HasCompanies")
.InV<CompanyNode>(p => p.Id == companyId, StringComparison.Ordinal)
.Out<ConfigurationRootNode>("HasConfigurationRoot")
.Out<CustomerNode>("HasCustomers")
.As<CustomerNode>("Customer")
.OutE("HasConfigurationStatuses")
.InV<ConfigurationStatusNode>(p => p.Status == configStatus, StringComparison.Ordinal)
.OutE("HasOpportunities")
.InV<OpportunityNode>(p => p.ConfigurationId == configurationId, StringComparison.Ordinal)
.BackV<CustomerNode>("Customer");
var testResults2 = results2.ToList();
-------- Cypher(见下文......这不起作用)
var results = graphClient.Cypher.Start("root", "node(0)")
.Match("(root)-[ha:HasApplications]->(Application)-[hs:HasCompanies]->Company-[hcr:HasConfigurationRoot]->(ConfigurationRoot)-[hc:HasCustomers]->(Customer)<-[hcs:HasConfigurationStatuses]-(ConfigurationStatus)<-[ho:HasOpportunities]-(Opportunity)")
.Where<CompanyNode>(Company => Company.Id == companyId)
.And().Where<ConfigurationStatusNode>(ConfigurationStatus => ConfigurationStatus.Status == configStatus)
.And().Where<OpportunityNode>(Opportunity => Opportunity.ConfigurationId == configurationId);
var x = results.Return<Node<CustomerNode>>("Customer").Results;
我的“匹配”属性可能无法正确设置?我根本无法从Cypher查询得到任何结果。这个与我的其他查询不同......这是唯一一个在Gremlin中执行BackV的人。
任何帮助将不胜感激!
谢谢! 帕特里克