c# - MongoDB选择与数组中的值匹配的记录
问题描述
我对 MongoDb 真的很陌生,我有两个 Mongodb 文档 Role 和 User
角色
{"_id":"5d0124b858d49243306deaa2",
"mdt":"2019-06-12T16:13:44.037Z",
"mby":"000000000000000000000000",
"IsDeleted":false,
"Name":"Manager"}
我的另一个文档是具有以下定义的用户,用户可以拥有多个角色。
用户
{
"firstName" : "John",
"lastName" : "Doe",
"Role" : {"5d0124b858d49243306deaa2", "6d0125b858749243306deaa2", "9b0124a852d49245306deba2"} \\ Array of role Id's assigned to users
}
如何使用 MongoDB .Net 驱动程序和 Linq 查询具有匹配角色的用户的名字和姓氏。
可能听起来很有趣,但我很少尝试如下
public List<User> GetCaseAssigneesByRoles(string roles)
{
return User.Query.Find(User.Query.EQ(a=>a.FirstName, roles)).ToList();
}
解决方案
您应该能够像这样查询用户:
public List<User> GetCaseAssigneesByRoles(string role)
{
return UserCollection
.Find(Builders<User>.Filter.AnyEq(u => u.Roles, role))
.ToEnumerable()
.ToList();
}
本质上AnyEq
接受一个数组 ( Roles
) 并检查列表中的任何单个项目是否等于您指定的值。您可能需要更改此示例中的某些字段名称。
或者对于角色列表(单个角色必须匹配):
public List<User> GetCaseAssigneesByRoles(List<string> roles)
{
return UserCollection
.Find(Builders<User>.Filter.AnyIn(u => u.Roles, roles))
.ToEnumerable()
.ToList();
}
或者对于角色列表(所有角色必须匹配):
public List<User> GetCaseAssigneesByRoles(List<string> roles)
{
return UserCollection
.Find(Builders<User>.Filter.All(u => u.Roles, roles))
.ToEnumerable()
.ToList();
}
推荐阅读
- python - 使用 bs4 和 Python 问题递归查找所有链接
- tensorflow - 如何将 keras add_weight() 变量与张量流概率分布一起使用?
- java - 无法启动网络服务器;由于缺少 ServletWebServerFactory bean,嵌套异常是无法启动 ServletWebServerApplicationContext
- go - 类型断言与导入接口
- python - 为什么 Mac 上的 Preview 不尊重 PDF 文件中的“只读”标志?
- scala - 如何使用 scalatest 运行 sbt 测试?我有一个错误:对象 scalatest 不是包 org 的成员
- html - HTML 不显示表情符号数据
- vbscript - 如何在VBScript中通过过滤器查找字符串?
- api - 什么是创建每个注册用户只能访问其数据的 API 的好策略
- r - 加载 XLConnect 时出错(loadNamespace 错误,参数长度为零)