【发布时间】:2015-10-29 08:23:22
【问题描述】:
我在这个由以下组成的简单玩具示例中评估 OrientDB 和 Neo4j:
- 员工,由
eid标识 - 会议,由
mid标识,并具有编码其开始和结束日期时间的start和end属性。
这两个实体由不同类别的顶点表示,即Employee 和CalendarEvent,它们由指定CalendarEvent-[Involves]->Employee 的Involves 边连接。
我的任务是编写一个查询,为每对员工返回他们第一次会议的日期/时间以及他们共同参加的会议次数。 在 Cypher 中,我会写如下内容:
MATCH (e0: Employee)<-[:INVOLVES]-(c:CalendarEvent)-[:INVOLVES]->(e1: Employee)
WHERE e0.eid > e1.eid
RETURN e0.eid, e1.eid, min(c.start) as first_met, count(*) as frequency
我为 OrientDB 编写了以下查询:
SELECT eid, other, count(*) AS frequency, min(start) as first_met
FROM (
SELECT eid, event.start as start, event.out('Involves').eid as other
FROM (
SELECT
eid,
in('Involves') as event
FROM Employee UNWIND event
) UNWIND other )
GROUP BY eid, other
但这对我来说似乎过于复杂。 有谁知道是否有更简单的方法来表达相同的查询?
【问题讨论】:
-
参数nt是什么意思?
-
对不起,我忘记换了。我应该写“开斋节”。我已经编辑了问题。
标签: orientdb