All()函数在应用Where Condition之前是否返回MongoDb中的所有文档?

时间:2017-02-26 18:35:56

标签: c# asp.net-mvc mongodb

我试图在我的.NEt MVC项目中使用它来学习MongoDb。我试图找到一个很好的教程来创建使用MongoDb库的企业级别,我想我做得很好。但我有一个问题一直困扰着我。

我有Get()函数,它按搜索条件返回对象列表。你可以看到Get()里面有All<>()函数。是否所有<>()从DB获取所有文档并应用Where条件?或者,它只获得满足Where条件的文档吗?

我无法设置探查器以找到我的问题的答案。这就是我在这里问的原因。拜托,没有downvotes

    public IList<Article> Get(string UrlText)
    {
        return DbContext.Current.All<Article>().Where(d => d.UrlText.ToLower().Contains(UrlText.ToLower())).OrderBy(d => d.Id).ToList();
    }

1 个答案:

答案 0 :(得分:1)

从.net环境调用时,MongoDB被转换为命令,并从该命令创建查询。 (我找不到来源,所以这可能不再适用,但原则是一样的。)

然后,当执行查询游标时,指向第一个文档将返回到.net环境,方法All<>()生成一个列表形式,即您获得的游标。光标只有您请求的项目,因此在满足条件之后。

我假设我们使用相同的mongo包装器:)

此原则也适用于限制,跳过,其他查询,如:Equal,GreaterThen,LeaserThen以及所有逻辑方法,如And,或...

修改

在mongoDB上执行的所有方法都缩小为类似mongo-csharp-driver

的方法
    private MongoCursor FindAs(Type documentType, IMongoQuery query, IBsonSerializer serializer)
    {
        return MongoCursor.Create(documentType, this, query, _settings.ReadConcern, _settings.ReadPreference, serializer);
    }