代码之家  ›  专栏  ›  技术社区  ›  SomeStudent

MongoDB和高效返回集合

  •  0
  • SomeStudent  · 技术社区  · 6 年前

    我的意思是,我知道使用NHibernate和EF-Core,查询是首先构建的,只有在您抛出它时才会触发。比如说像一个IQueryable到iEnumerable、.ToList()等。

    前任:

    //Query is fired when I call .ToList, until that point it is just building it
    context.GetLinqQuery<MyObject>().Where(x => x.a == 'blah').ToList();
    

    然而,在Mongo的例子中,我觉得如果我想要获取一个过滤结果,我首先需要获取集合,然后过滤它。

    var collection = _database.GetCollection<MyObject>("MyObject");
    //Empty filter for ease of typing for example purposes
    var filter = Builders<MyObject>.Filter.Empty;
    var collection.Find(filter).ToList();
    

    如果我在这里遗漏了什么,我想我在GetCollection方法中没有看到任何接受过滤器的重载。这是否意味着它将首先将整个集合加载到内存中,然后对其进行过滤?或者它仍然在构建查询,并且只在我调用.Find或.ToList时执行它?

    参考资料: https://docs.mongodb.com/guides/server/read_queries/

    1 回复  |  直到 6 年前
        1
  •  2
  •   ProgrammingLlama Raveena Sarda    6 年前

    相当于你的 context.GetLinqQuery<MyObject>() 将使用 AsQueryable :

    collection.AsQueryable().Where(x => x.a == "blah").ToList();
    

    * 相当于:

    collection.Find(Builders<MyObject>.Filter.Eq(x => x.a, "blah")).ToEnumerable().ToList();
    

    * The docs 声明:

    仅支持可转换为等效MongoDB查询的LINQ查询。如果您编写了无法翻译的LINQ查询,则会出现运行时异常,错误消息将指示查询的哪一部分不受支持。