[英]How to find items in a collection that nested array field contains specific string using mongodb .net driver C#?
我的收藏中有ClassRoom
文档,每个ClassRoom
中都有一组Students
。 如何找到学生的名字或姓氏包含特定字符串的班级? 注意:我想使用过滤器构建器来实现它,而不是 Linq 也不是聚合管道。
[
{
_id: 1,
name: 'Room1',
students:
[
{
_id: 1,
firstName: 'John Junior',
lastName: 'Smith'
},
{
_id: 2,
firstName: 'Jane',
lastName: 'Jones'
}
]
},
{
_id: 2,
name: 'Room2',
students:
[
{
_id: 3,
firstName: 'Mike',
lastName: 'John'
},
{
_id: 4,
firstName: 'Kate',
lastName: 'Doe'
}
]
},
{
_id: 3,
name: 'Room3',
students:
[
{
_id: 5,
firstName: 'Johnathan',
lastName: 'Davis'
}
]
}
]
例如,如果我们得到字符串john
,查询将返回所有教室。
您可以将 $elemMatch 与 $regex 结合使用,例如:
// Define the regex to look for
var regex = new Regex("john", RegexOptions.IgnoreCase);
// Set up the filter
var filter = Builders<Class>.Filter.ElemMatch(
x => x.Students,
Builders<Student>.Filter.Or(
Builders<Student>.Filter.Regex(x => x.FirstName, regex),
Builders<Student>.Filter.Regex(x => x.LastName, regex)
));
// Read results
var result = await (await classes.FindAsync(filter)).ToListAsync();
就性能而言,使用正则表达式并不是最佳选择; 如果太慢,你也可以看看全文搜索。 有关详细信息,请参阅此链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.