你能告诉我下面查询的C#等价物吗?
db.RolesNPerm.find(
{ "Roles.Name":{$in:[ "PO","role1","TO"] }},
{ _id: 1, ParentId: 1 }
)
如果嵌入文档(Roles
(中的Name
与列表中的任何值匹配,我将尝试选择记录中的字段(_id
和ParentId
(。
这是我的MongoDB文档
{
"_id" : "1",
"ParentId" : "par1",
"Roles" : [
{
"Name" : "PO",
"_id" : "5bc08ee1f12541c3aaa03084"
}
]
}
以下是我作为角色查询的结果。名称与名称列表中的"PO"匹配。
{
"_id" : "1",
"ParentId" : "par1"
}
至少有两种方法:
您可以使用Builder
类来构建过滤器和投影部件。问题是,不能使用强类型lambda表达式来表达Roles.Name
部分,因此可以使用FieldDefinition
类型作为后备
var values = new[] { "PO", "role1", "TO" };
FieldDefinition<Model, string> field = "Roles.Name";
var filter = Builders<Model>.Filter.In(field, values);
var project = Builders<Model>.Projection.Combine(
Builders<Model>.Projection.Include(x => x._id),
Builders<Model>.Projection.Include(x => x.ParentId)
);
var result = Col.Find(filter).Project(project).ToList();
或者,您可以使用LINQ语法,该语法将被翻译为相关的MongoDB命令:
var values = new[] { "PO", "role1", "TO" };
var q = from doc in Col.AsQueryable()
where doc.Roles.Any(x => values.Contains(x.Name))
select new Model6()
{
ParentId = doc.ParentId,
_id = doc._id
};
var result = q.ToList();