使用.net Core和mongodb了解性能

麦可

这是我第一次拥有.net核心并且MongoDB通常使用Entity Framework ORM。我使用.net core 3和MongoDB驱动程序2.11来处理数据库。

这是存储库服务的示例:

public class Repository<T> : IRepository<T> where T : IDocument
{
    private readonly IMongoCollection<T> _collection;

    public Repository(IDatabaseSettings settings)
    {
            var client = new MongoClient(settings.ConnectionString);
            var database = client.GetDatabase(settings.DatabaseName);
            _collection = database.GetCollection<T>(GetCollectionName(typeof(T)));
    }

    Task<T> FindOneAsync(Expression<Func<T, bool>> filterExpression){}
    Task<T> FindByIdAsync(string id){}
    Task InsertOneAsync(T document) {}
    Task InsertManyAsync(ICollection<T> documents){}
    Task ReplaceOneAsync(T document) {}
    Task DeleteOneAsync(Expression<Func<T, bool>> filterExpression){}
    Task DeleteByIdAsync(string id) {}
    Task DeleteManyAsync(Expression<Func<T, bool>> filterExpression){}
    
}

如您所见,这是存储库类的标准定义。

我的问题是,当存储库与特定集合一起使用时,是否所有集合都已加载到本地内存?

例如,如果我想在集合中找到特定的文档,那么构造函数中的GetCollection从数据库中获取集合并在本地运行集合中的所有文档吗?

还是像Entity Framework ORM一样生成查询并在数据库中执行查询?

舱壁

我的问题是,当存储库与特定集合一起使用时,是否所有集合都已加载到本地内存?

不。

它只需要一个“句柄”即可。它并没有获取任何文件。

例如,如果我想在集合中找到特定的文档,那么构造函数中的GetCollection从数据库中获取集合并在本地运行集合中的所有文档吗?

两者都不。

您将需要使用FindOneFindById这些将发出查询以获取文档(与此相关的一个)

顺便说一句,您可能还想要一个Find(因此不只获得一个文档)

还是像Entity Framework ORM一样生成查询并在数据库中执行查询?

GetCollection 不会生成查询以获取任何内容


似乎有点“权威”,所以您可以打开mongo shell并玩一下:

// just set up some data to collection dummy
> db.dummy.insert([{a:2},{a:1}])
// look for any document having field 'a' with value 1.
// only one doc returned, fair enough
> db.dummy.find({ a: 1 })
{ "_id" : ObjectId("60334ea3623e06e621f86a0b"), "a" : 1 }

// this is equivalent to
> db.getCollection('dummy').find({ a: 1 })
// without the find() you just get information on the collection, NO documents fetched
// imagine collection as an object, on which you can issue queries (find, findOne, remove, ...)
// but not necessarily query to touch documents: e.g ensureIndex, help, ...
// (just type <<tab>> to see available commands)
> db.getCollection('dummy')
dummy.dummy

附带一提,getCollection允许使用名称有点特殊的命名来定位集合名称

db._dummy.insert({ a: 1 }) // fails because of '_' char
uncaught exception: TypeError: db._dummy is undefined :
db.getCollection('_dummy').insert({ a: 1 })
WriteResult({ "nInserted" : 1 })

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

.NET Core使用MongoDb配置OpenIddict

来自分类Dev

了解和使用“服务层”-.NET MVC 5

来自分类Dev

如何使用用户名和密码访问 Asp.Net Core 中的 MongoDb?

来自分类Dev

结合使用.NET Core Identity和API

来自分类Dev

使用 .NET Core 服务从 MySQL 读取 č、ć 和 đ

来自分类Dev

.NET Core和.Net 4.5.2都使用的通用类库

来自分类Dev

.NET Core和.Net 4.5.2都使用的通用类库

来自分类Dev

使用 EF Core Code First 和 IdentityUser 的 .Net Core API

来自分类Dev

如何在mongodb的.net Core中使用hangfire?

来自分类Dev

使用 MongoDb 在 Asp.NET Core 中上传文件

来自分类Dev

在.NET Core中使用反射

来自分类Dev

使用.net Core删除tableprefix

来自分类Dev

.Net Core 无法使用位图

来自分类Dev

在.NET Core上使用EntityFrameworkCore和SQLite执行原始SQL

来自分类Dev

使用ASP.NET Core和MVC存储本地文件

来自分类Dev

使用Roslyn和.NET Core生成C#代码

来自分类Dev

使用Visual Studio和Asp.Net Core的Dockerfile错误

来自分类Dev

使用.NET Core创建,显示和保存/导出绘图/图表

来自分类Dev

如何使用Blazor和.Net Core创建CRUD操作

来自分类Dev

使用.Net Core SDK版本映射.Net Core Runtime版本

来自分类Dev

使用ASP.Net Core定位netcoreapp和完整的net461

来自分类Dev

如何使用 VSTS 部署(和运行).NET Core ASP.NET 应用程序?

来自分类Dev

混合使用 .NET Framework 和 .NET CORE 有什么问题?

来自分类Dev

.NET元组和等于性能

来自分类Dev

使用Cookie的ASP.NET Core .NET Framework测试

来自分类Dev

如何使用.NET Framework C#脚本安装.NET Core?

来自分类Dev

是否可以在带有.NET Framework的.NET Core中使用

来自分类Dev

我的项目使用 .NET Core 还是 .NET Standard

来自分类Dev

MongoDB + .NET Core 1.0?

Related 相关文章

热门标签

归档