首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MongoDB聚合将数组按顺序与中间元素匹配

如何使用MongoDB聚合将数组按顺序与中间元素匹配
EN

Stack Overflow用户
提问于 2020-05-28 16:03:57
回答 1查看 48关注 0票数 0

我有带有一系列事件对象的文档:

代码语言:javascript
复制
  {
    "events": [
      {
        "name": "A"
      },
      {
        "name": "C"
      },
      {
        "name": "D"
      },
      {
        "name": "B"
      },
      {
        "name": "E"
      }
    ]
  },
  {
    "events": [
      {
        "name": "A"
      },
      {
        "name": "B"
      },
      {
        "name": "S"
      },
      {
        "name": "C"
      }
    ]
  }
] 

在这个数组中,我希望计数按上述顺序排列的事件数量,以及中间的事件。例如,我查找A,B,C的顺序,数组A,x,x,B,x,数组A,x,x,B,x,x数组,我应该计算2,其中A,B,x,x,C应该有3。(x只是其他任何东西的占位符)。

我想以数组的形式总结所有文档的这些信息,并给出每个元素的匹配数。在前面的例子中,A的匹配数为2,2,1,A为2,B为2,C为1。

我的当前聚合是在javascript中生成的,并遵循以下模式:

包含A documents

  • Append的事件数组与
  • 匹配数组从A到数组末尾的数组
  • 计数汇总数组
  • 匹配文档的数量与包含B

H 112的事件数组从B到数组的末尾<>H 213H 114计数documents

  • etc

的数量

但是,当事件没有出现在任何数组中时,它就会出现短路,因为没有文档,所以我没有方法存储汇总数组。例如,对于事件数组A、x、x、B、x,并试图匹配A、B、D,我会期望2,2,0,但我有[],在尝试匹配D时,什么都不会出现,聚合也不能继续。

下面是我正在处理的聚合:https://mongoplayground.net/p/rEdQD4FbyC4将匹配的字母l.75更改为数组中不存在问题的行为。

那么,在没有匹配的情况下,是否有办法不丢失我的数据呢?就像绕过聚合阶段一样,我在mongoDB文档中找不到任何与绕过阶段有关的内容。

或者你知道另一种方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 02:02:03

我们用约简来解决我们的问题。

减缩是在events数组上进行的,对于每个事件,我们尝试在“累加器的大小”位置按顺序将其与元素匹配,如果是匹配,则将其添加到累加器中,或者不添加,等等。

这里是芒果游乐场:https://mongoplayground.net/p/ge4nlFWuLsZ\

  • 我们想要匹配的序列在“
  • ”字段中匹配匹配的元素在“匹配”字段

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62069253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档