是的,你可以在 Neo4j 中有多个起始节点,不确定其他图形数据库。
START a=node(0), b=node(1)
RETURN a,b
您应该参考http://docs.neo4j.org/chunked/stable/query-start.html了解更多详情。从 Neo4j 2.0 开始,起始节点是可选的,Cypher 将尝试根据标签和 where 子句从您的查询中推断起始点。
编辑
我已经根据更新的问题编辑了答案。你需要的是一个超图。正如 Wes Freeman 所提到的,要对超图 Neo4j 进行建模,您需要创建一个中间节点来连接其他两个节点和第三个节点。在您的场景中,用户将与两种产品(A 和 B)建立 PURCHASED 关系,有点像(:User {Id: 1})-[:PURCHASED]->(:Product {Name:A})
。然后你将不得不创建一个像 ProductQualifier 这样的中间节点(我很不擅长命名事物),它与用户有关系,比如(:User {Id:1})-[:QUALIFIES]->(:ProductQualifier {Id:1})
. 产品限定符将有 3 个关系,两个分别与产品 A 和 B,第三个与产品 C,
(:Product {Name: 'B'})<-[:HAS]-(:ProductQualifier {Id:1})-[:HAS]->(:Product {Name: 'A'})
(ProductQualifier {Id:1}-[:ELIGIBLE]->(:Product {Name: 'C'})
这应该做你想要的。
您可以采取的第二种方法是使用本身支持超图的数据库,例如Hypergraphdb,从而消除创建额外节点的负担。虽然我想尝试它已经有一段时间了,但我还没有任何机会使用它,所以我不太了解它的 API 或它的局限性,但它是相当有名的图形数据库。
注意:如前所述,我非常不擅长命名事物。您可能应该将标签名称更改为更适合您的业务模型。