我一直在为最近的一个项目使用 NEO4j 数据库。
最近,我们注意到 Cypher 查询比 Gremlin 运行得更快,因此我们决定转换我们的查询。我们正在使用 .Net 图形客户端运行查询。
我在转换为 Cypher 时遇到了一个 Gremlin 查询。
----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 的查询。
任何帮助,将不胜感激!
谢谢!帕特里克