.net-core - 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] 总是。
解决方案
推荐阅读
- android - WorkManager 退避延迟在某些设备上不起作用
- android - android studio 3.3 clang-tidy
- swift - 如何在 UI 测试中与与我的测试应用程序捆绑的 GMSMapViews 交互?
- c# - 如何在 TCPserver 中显示从 TCPclient 收到的消息到 MessageBox?
- python - python中的多级/多页网页抓取
- android - Android语音超时-语音识别
- php - 如何使用 MySQL 查询解密 openssl_encrypt() 加密值?
- ms-access - 在单独的表格中查找日期范围内的多个条件
- c# - 如何在 Visual Studio 中设置 RegistryKey 值?
- javascript - ElementUI 消息初始渲染禁用