繁体   English   中英

如何使用 mongodb .net 驱动程序 C# 在集合中查找嵌套数组字段包含特定字符串的项目?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM