重复的ArangoDB INTERSECTION()

时间:2018-11-30 22:30:40

标签: intersection arangodb

我发现自己处于一种情况,在这种情况下,我需要找到两个数组的交集,以便能够计算出某项在交集中出现的次数。不幸的是,ArangoDB的INTERSECTION()工具删除了重复项。有人知道不使用过滤器来保留重复的方法吗?这是我目前正在使用的东西。

FOR x in INTERSECTION ((
for v IN 2 ANY a1 GRAPH 'Graph1'
    COLLECT eid = v._id WITH COUNT into groups
    RETURN {"eid" : eid, "count" : groups }),(
for v IN 2 ANY a2 GRAPH 'Graph2'
    COLLECT eid = v._id WITH COUNT into groups
    RETURN {"eid" : eid, "count" : groups }))
SORT x.count DESC
LIMIT 10
RETURN x

另一个问题(可能是问题的根源)是我只需要与eid进行交集,并且当前正在比较eid和count。这意味着如果eid / 5在第一组中发生10次,而在第二组中发生8次,则它将被忽略。但是,如果我在交点后进行计数,则所有项目都以1计数返回,因为已删除重复项。感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我尝试了此AQL,它应该可以工作:

LET arA = (
for v IN 2 ANY a1 GRAPH 'Graph1'
    COLLECT eid = v._id WITH COUNT into groups
    RETURN {"eid" : eid, "count" : groups })
LET arB = (
for v IN 2 ANY a2 GRAPH 'Graph2'
    COLLECT eid = v._id WITH COUNT into groups
    RETURN {"eid" : eid, "count" : groups })
LET x = (FOR x in INTERSECTION (arA[*].eid,arB[*].eid)
 RETURN x)
FOR final IN UNION(arA,arB)
  FILTER final.eid IN x 
  SORT final.count DESC
RETURN final

基本上将数组分开计数,然后进行相交以获取两个数组中的EID。

但是,然后分别使用UNION,再次遍历所有项目,仅过滤INTERSECTION中的项目,并按属性f.count对其进行排序。 count属性现在可用,因为我有两个原始数组中的条目,这些条目均由INTERSECTION中显示的eid过滤。

结果是:

[
  {
    "eid": "eid6",
    "count": 5
  },
  {
    "eid": "eid3",
    "count": 4
  },
  {
    "eid": "eid2",
    "count": 3
  },
  {
    "eid": "eid3",
    "count": 3
  }
]