.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]始终是