首页 > 解决方案 > C# MongoDB 驱动程序通过过滤或任何聚合框架管道替换递归调用

问题描述

一个集合如下所示

{
    "userId": "b6e7245d-3a25-4d39-b589-f34aecd3fb71",
    "userName": "emailId",
    "roles": [
        {
            ...
            "value": "Manager"
        }
    ],
    "extensions": [
        {
            ...
            "Supervisor": "User-id of supervisor"
        }
    ]
}

在使用过滤之前,我们有一个递归函数,它会首先获取他下面的用户,然后在每个用户上,它会再次获取他下面的用户。因此,例如,登录用户是经理,它将获取他下面的主管,然后对于每个主管,使用用户 ID 获取该主管下的用户。

现在,如何删除递归调用并使用过滤器在单个数据库调用中执行它?因为我可以通过以下方式获取经理下的主管,

//have another filters as well
 filters.Add(Builders<Users>.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));

聚合框架查找用于加入集合,我只有一个集合,或者仍然,我可以使用查找来实现这一点?

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

extensions 是一个数组,但它是一个对象,所以 extensions[0] 总是。

标签: .net-coreaggregation-frameworkmongodb-.net-driver

解决方案


推荐阅读