问题:使用 MongoDB C# 驱动程序在嵌套数组上使用过滤器生成器进行查询

考虑以下存储为文档的对象结构:

public class Foo
{
    public string Id { get; set; }
    public ICollection<FooBar> Bars { get; set; }

    // ...
}

public class FooBar
{
    public string BarId { get; set; }

    // ...
}

使用带有驱动程序的 LINQ 样式查询,我可以Find所有包含FooBar``BarIdFoo如下所示:

var foos = await m_fooCollection.Find( f => f.Bars.Any( fb => fb.BarId == "123") ).ToListAsync();

如何使用FilterDefinitionBuilder而不是Find上的内联 LINQ 来实现相同的查询?

解答

您需要执行的查询使用$elemMatch查询运算符。

因此,此查询使用 lambda 表达式

var findFluent = collection.Find(f => f.Bars.Any(fb => fb.BarId == "123"));

等效于使用FilterDefinitionBuilder进行此查询:

var findFluent = collection.Find(Builders<Foo>.Filter.ElemMatch(
    foo => foo.Bars, 
    foobar => foobar.BarId == "123"));
Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐