C#MongoDB驱动程序强类型过滤器使用情况

时间:2016-07-13 20:25:17

标签: c# mongodb mongodb-.net-driver

文档告诉您如何定义过滤器,但不知道如何使用过滤器。

public class Widget : BsonDocument
{
    [BsonElement("X")]
    public int X { get; set; }

    [BsonElement("Y")]
    public int Y { get; set; }
}

public MyItem Get()
{
    MyItem retvalue = null;

    var builder = Builders<BsonDocument>.Filter;
    var filter = builder.Eq("x", 10) & builder.Lt("y", 20);
    Console.WriteLine(_collection.Count(filter));

    var builder2 = Builders<Widget>.Filter;
    var filter2 = builder2.Eq(widget => widget.X, 10) & builder2.Lt(widget => widget.Y, 20);
    Console.WriteLine(_collection.Count(filter2));

    return retvalue;
}

所以第一个过滤器正在运行 - 但强类型。

不能像这样使用第二个过滤器 编译器错误:无法从'MongoDB.Driver.FilterDefinition'转换为'MongoDB.Driver.FilterDefinition'

所以问题是 - 我如何将其用作过滤器。显然,filter参数定义为FilterDefinition。从BsonDocument派生MyItem没有帮助。 “filter2.ToBsonDocument()”编译但不会产生正确的结果(过滤器无效!)。

有人能指出我正确的方向吗? 还有一些我能读到的地方吗?

1 个答案:

答案 0 :(得分:1)

首先,我建议使用as querable来操作查询。

  _result = _collection.AsQueryable().First(w => w.X == x && w.Y < y);

或使用表达式过滤器定义

_result = _collection
           .Find(new ExpressionFilterDefinition<Widget>
               (widget => widget.X == 10 && widget.Y < y))
           .First()

github

上的完整版

c#driver reference here