【问题标题】:ArangoDB Query for consecutive matches to an arrayArangoDB 查询与数组的连续匹配
【发布时间】:2015-08-30 22:46:25
【问题描述】:

在 ArangoDB 中,我需要在具有整数矩阵的文档中搜索一定数量的连续匹配数组。

示例文档(all are int[5][5]):

nums:
25, 32, 26, 27, 29
01, 22, 15, 17, 99
12, 14, 17, 19, 88
16, 14, 12, 17, 19
02, 08, 09, 18, 19

在java中我有一个int[5] example.:

22, 23, 24, 25, 26

我需要退回所有符合以下任何一项的文件:

java 数组中的至少 4 个数字与任何矩阵行中的至少 4 个连续数字匹配。例如。如果矩阵行有22, 23, **29**, 24, 25,它将不匹配,因为数组中没有一组四个数字彼此相邻(但是,如果顺序与数组的顺序匹配并不重要)。但是,如果它是22, 26, 23, 24,它将匹配,因为数组中至少有四个连续的数字。例如:

**22**, 32, 26, 27, 29
**26**, 22, 15, 17, 99
**23**, 14, 17, 19, 88
**24**, 14, 12, 17, 19
  02,   08, 09, 18, 19

与上面相同,但在任何矩阵列而不是行中

20, 01, 02,  03,  08
01,*22,*23*,*25*,*24*
12, 14, 17, 19, 88
16, 14, 12, 17, 19
02, 08, 09, 18, 19

与最后两个相同,但对角线,而不是在一行或一列中

**22**, 32, 26, 27, 29            01, 02, 03,   04,   05
01, **23**, 15, 17, 99            06, 07, 08, **24**, 10
12, 14, **26**, 19, 88            11, 12, **23**, 14, 15
16, 14, 12, **25**, 19            16, **25**, 18, 19, 20
02, 08, 09,   18,   19          **22**, 22,   23, 24, 25

任何矩阵中没有两个数字是相同的。例如,在整个矩阵中不会出现多次1

我不太确定如何解决这样的问题。目前,我正在查询矩阵中至少有 4 个数字与数组数字匹配的所有文档,但我想有一种方法可以查询这个。我所能想到的就是生成每个可能的矩阵的组合来查询匹配的矩阵,这显然是不现实的。

更新: 关于建议使用 JS 扩展的答案,如何解决这个问题?我不熟悉 ArangoDB 扩展。

【问题讨论】:

    标签: javascript matrix arangodb aql nosql


    【解决方案1】:

    用纯 AQL 来做这件事可能有点做作,我建议检查一下添加你自己的 JS 函数来匹配它(参见https://docs.arangodb.com/AqlExtending/index.html

    用 JS 来做会很容易,并将其用作过滤器匹配。

    【讨论】:

    • 对 js 不太熟悉,对 JS AQL 扩展也不太熟悉。我该怎么做呢?
    • 基本上是length(row intersect (22, 23, 24, 25, 26)) >= 4。可以使用 ES2015 的 Sets,但它们不提供 contains()intersect() 等。因此您需要 extend them 进行集合理论操作,或使用 some other library 进行该操作(例如基于数组)。
    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2017-10-07
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多