使用TRAVERSE进行OrientDB活动供稿查询

时间:2016-11-20 15:30:31

标签: javascript sql orientdb

我对orientDB很新,我开始在图形模式下使用这个数据库,我想创建一个查询来获取特定用户的活动源。通常在nosql数据库中,我复制每个关注者的活动节点中的任何新活动的关键字。但我发现在图表数据库中可以避免这个过程,因为我可以使用TRAVERSE方法获得任何活动。我有一系列不同的顶点链接由一系列不同的EDGES。我的图是这个

enter image description here

任何用户都是可以跟随其他用户的顶点,可以创建新事件并可以对其他事件发表评论。从用户开始的任何边缘都是父"UserEdgeActivity"的子类,我的问题是,如何才能获得我关注的用户的活动? 任何EDGE都有三个属性created: datetime, in: LINK, out: LINK

通过以下方式检索所有边缘活动我使用此查询

SELECT FROM(TRAVERSE outE("UserEdgeActivity") FROM (SELECT FROM OUser WHERE name="admin")) WHERE $depth > 0 AND out!=#5:5 AND in!=#5:5 ORDER BY created DESC

不幸的是,查询返回null结果,但用户“admin”跟随执行不同活动的不同用户。 我的目标是检索我的以下联系人按日期排序的所有跟随,事件或评论操作,但不包括对用户“admin”或从他出来的传入活动。 我认为使用遍历方法可以实现这一点。这样做的确切查询是什么?

更新:

使用此查询解决

SELECT FROM(TRAVERSE out("NewFollow"), outE("UserEdgeActivity") FROM (SELECT FROM OUser WHERE name=? LIMIT 1) WHILE $depth < 3) WHERE $depth > 0 AND out.name!=? AND (in["@class"]!="OUser" OR in.name!=?)AND @class!="OUser" AND (@class!="NewComment" OR (@class="NewComment" AND in.out("NewCommentToEvent")[0].in("NewEvent")[0]["name"]!=?)) ORDER BY created DESC

0 个答案:

没有答案