过滤数据结构AND / OR / NOT的算法(类似于GraphQL实现)

时间:2019-05-25 22:30:26

标签: algorithm graphql prisma prisma-graphql

我想实现一个数据结构,以便在我的应用程序中进行强大的过滤。

我找到的最接近的实现来自Prisma https://www.prisma.io/docs/1.27/prisma-graphql-api/reference/queries-qwe1/#combining-multiple-filters(据我了解,实际上是来自GraphQL规范)

示例:

{
  OR: [
    {
      AND: [
        { title_in: ["My biggest Adventure", "My latest Hobbies"] }
        { published: true }
      ]
    }
    { id: "cixnen24p33lo0143bexvr52n" }
  ]
}

该想法是将上下文与过滤条件进行比较,看看是否匹配。

在上面的示例中,“上下文”将是具有idtitlepublished字段的对象。

我正在寻找一种可以执行比较并确定是否匹配的算法。

由于我不想重新设计轮子(特别是它是一个复杂的算法恕我直言,因为可以嵌套AND / OR / NOT条件),所以我想知道该特定算法是否已经存在,或者是否基于某些标准< em>(因为我们可以在Prisma,PipeDrive等应用程序中找到特定的数据结构)。

我正在寻找文档,实现示例,甚至是开源实现。 (我正在使用JS)

2 个答案:

答案 0 :(得分:1)

我也在寻找这样的实现,但是找不到。

因此,我为此创建了一个原型:https://github.com/Errorname/logical-object-match

答案 1 :(得分:0)

我们找不到符合我们要求的解决方案,因此建立了自己的解决方案并将其发布为OSS(MIT)。

https://github.com/UnlyEd/conditions-matcher

  

将给定上下文与过滤器(一组条件)进行比较,并确定上下文是否验证过滤器。受到GraphQL过滤器的强烈启发。