Mongodb$redact-获取分层路径

Mongodb$redact-获取分层路径,mongodb,aggregation-framework,Mongodb,Aggregation Framework,在$redact管道中,是否可以知道当前文档位于哪个数组下?例如,设想在以下文档结构上运行$redact管道: arrayOut : [ ... arrayIn1: [ ... ], arrayIn2: [ ... ] ] 我想知道该文件是否正在arrayIn1下处理。我尝试了以下方法,但没有成功: redact :{ $cond :{ "if": { $or : [

在$redact管道中,是否可以知道当前文档位于哪个数组下?例如,设想在以下文档结构上运行$redact管道:

arrayOut : [
    ...
    arrayIn1: [
        ...
    ],
    arrayIn2: [
        ...
    ]
]
我想知道该文件是否正在arrayIn1下处理。我尝试了以下方法,但没有成功:

redact :{
    $cond :{
        "if": {
            $or : [
                { $eq : ["$$CURRENT" , "$$ROOT"] }, // match the most outer structure
                { $setIsSubset : [["$$CURRENT"] , "$$ROOT.arrayIn1"] } // never true
                ]
            },
        "then" : "$$DESCEND",
        "else" : "$$PRUNE"
         }        
    }      
}

$redact以递归方式工作,尤其是使用$$descent时,并且不公开它当前处于哪个级别,也不公开它正在处理哪个元素。主要目的是编校不符合指定身份验证标准的文档级别。政府和法律部门希望以此为例。您似乎试图将这个管道阶段硬塞进一个它不是专门为之设计的目的中。好的,文档中提到的只是b授权标准,这并不意味着我们可以在其他用例中实现。。。在这里,我尝试了几乎相同的想法,但只想在达到特定水平后停止。如果您键入{$eq:[$$CURRENT,$$ROOT]}您可以自己看到它在最外层之后停止,我相信其他层也应该有一种方法,$$CURRENT和$$ROOT被定义为完全不同。我之前已经警告过您这一点,因为$redact并不真正适合您试图应用它的内容。由于递归的性质,它还进行了一些不必要的处理,正如我在之前的文章中已经知道的,您将其视为一个数组过滤器。我已经告诉过你,如果你想避免$unwind,就使用$map。这是我目前最快的可能性。使用“展开”和“地图”并不能像编辑一样快速完成工作。关于current和root,若你们知道它们是如何定义的,也许你们可以帮我解释为什么second和first不匹配