.net core C#MongoDB驱动程序通过过滤或任何聚合框架管道替换递归调用

.net core C#MongoDB驱动程序通过过滤或任何聚合框架管道替换递归调用,.net-core,aggregation-framework,mongodb-.net-driver,.net Core,Aggregation Framework,Mongodb .net Driver,集合如下所示 { "userId": "b6e7245d-3a25-4d39-b589-f34aecd3fb71", "userName": "emailId", "roles": [ { ... "value": "Manager" } ],

集合如下所示

{
    "userId": "b6e7245d-3a25-4d39-b589-f34aecd3fb71",
    "userName": "emailId",
    "roles": [
        {
            ...
            "value": "Manager"
        }
    ],
    "extensions": [
        {
            ...
            "Supervisor": "User-id of supervisor"
        }
    ]
}
在使用过滤之前,我们有一个递归函数,它将首先获取他下面的用户,然后在每个用户上,它将再次获取他下面的用户。 例如,登录的用户是Manager,它将获取其下的主管,然后为每个主管使用用户id获取该主管下的用户

现在,如何删除递归调用,并使用过滤器在单个DB调用中执行它? 因为我可以在经理的带领下找到主管

//have another filters as well
 filters.Add(Builders<Users>.Filter.ElemMatch(x => x.extensions, y => y.Supervisor == userId));
//还有其他筛选器
filters.Add(Builders.Filter.ElemMatch(x=>x.extensions,y=>y.Supervisor==userId));
但是如何在那个主管下过滤用户是我要找的。 像下面这样

filters.Add(Builders<Users>.Filter.ElemMatch(x => x.extensions, y => y.Supervisor == userId 
                      || Builders<UserMetadata>.Filter.Where(p => p.UserId == y.userId && x.extensions[0].Supervisor == userId));
filters.Add(Builders.Filter.ElemMatch(x=>x.extensions,y=>y.Supervisor==userId
||其中(p=>p.UserId==y.UserId&&x.extensions[0].Supervisor==UserId));
聚合框架查找用于加入集合,而我只有一个集合,或者我仍然可以使用查找来实现这一点

使用C#MongoDB.Driver-2.9.3、Azure CosmosDB 3.6

扩展是一个数组,但它是单个对象,因此扩展[0]始终是