我有带有一系列事件对象的文档:
{
"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
H 112的事件数组从B到数组的末尾<>H 213H 114计数documents
的数量
但是,当事件没有出现在任何数组中时,它就会出现短路,因为没有文档,所以我没有方法存储汇总数组。例如,对于事件数组A、x、x、B、x,并试图匹配A、B、D,我会期望2,2,0,但我有[],在尝试匹配D时,什么都不会出现,聚合也不能继续。
下面是我正在处理的聚合:https://mongoplayground.net/p/rEdQD4FbyC4将匹配的字母l.75更改为数组中不存在问题的行为。
那么,在没有匹配的情况下,是否有办法不丢失我的数据呢?就像绕过聚合阶段一样,我在mongoDB文档中找不到任何与绕过阶段有关的内容。
或者你知道另一种方法吗?
发布于 2020-06-02 02:02:03
我们用约简来解决我们的问题。
减缩是在events数组上进行的,对于每个事件,我们尝试在“累加器的大小”位置按顺序将其与元素匹配,如果是匹配,则将其添加到累加器中,或者不添加,等等。
这里是芒果游乐场:https://mongoplayground.net/p/ge4nlFWuLsZ\
中
https://stackoverflow.com/questions/62069253
复制相似问题