Tag: mongodb .net driver

如何提高MongoDB插入性能

结果: 如果您正在对容错的数据集进行操作,或者执行一次性过程,则可以进行validation,将WriteAcknowledge更改为Unacknowledged可以提供帮助。 此外,默认情况下,批量操作是IsOrdered,我不知道。 将此设置为False实际上会使操作批量执行,否则它将作为一个更新线程运行。 MongoDB 3.0 / WiredTiger / C#驱动程序 我有一个包含147,000,000个文档的集合,其中我每秒都会执行更新(希望如此)。 3000个文件。 以下是更新示例: “query” : { “_id” : BinData(0,”UKnZwG54kOpT4q9CVWbf4zvdU223lrE5w/uIzXZcObQiAAAA”) }, “updateobj” : { “$set” : { “b” : BinData(0,”D8u1Sk/fDES4IkipZzme7j2qJ4oWjlT3hvLiAilcIhU=”), “s” : true } } 这是一个典型的更新,我的要求是以每秒3000的速度插入。 不幸的是,这些花费的时间是原来的两倍,例如最后一次更新是针对1723个文档,并且需要1061毫秒。 该集合仅在_id上有索引,没有其他索引,并且该集合的平均文档大小为244字节,无上限。 服务器有64GB内存,12个线程。 插入性能非常好,收集尺寸较小,比如大约5000万,但是大约8000万之后真正开始下降。 可能是因为整套不在内存中? 数据库由RAID0 SSD支持,因此IO性能不应成为瓶颈,如果它应该在一开始就显示出来? 非常感谢一些指导,因为我相信MongoDB可以满足我的相当微薄的要求,而不是它使用的一些应用程序。数据库没有大量的读取率,因此Sharding不会改善问题,尽管可能我错了。 无论哪种方式,目前的插入率都不够好。 更新:这里只是查询的explain()… “queryPlanner” : { “plannerVersion” : 1, “namespace” : “Collection”, “indexFilterSet” […]

mongodb和C#的工作单位

我知道MongoDB不应该支持工作单元等。但我认为实现只存储意图(类似于标准)然后将它们提交给DB的存储库会很好。 否则,在存储库中的每个方法中,您都必须创建与DB的连接,然后将其关闭。 如果我们将连接放在某个BaseRepository类中的DB,那么我们将我们的存储库绑定到具体的数据库,并且测试存储库非常困难,以测试解决存储库的IoC。 在MongoDB中创建会话是个坏主意吗? 有没有办法将连接逻辑与存储库分开? 以下是Rob Conery的一些代码。 在每次请求时始终连接到您的数据库是一个好主意吗? 什么是最佳做法? 还有一件事。 想象一下,我想为集合提供索引。 以前我在构造函数中做过,但是使用Rob的方法,这似乎不符合逻辑。 using Norm; using Norm.Responses; using Norm.Collections; using Norm.Linq; public class MongoSession { private string _connectionString; public MongoSession() { //set this connection as you need. This is left here as an example, but you could, if you wanted, _connectionString = “mongodb://127.0.0.1/MyDatabase?strict=false”; } public void […]

带有C#的MongoDB – 使用动态生成的谓词进行查询

我无法使用动态生成的谓词查询MongoDB数据库。 我试图查询的文档结构是: { “_id” : 3121 , “Active” : true , “CategoryId” : 1 , “Crci” : “IH” , “CultureId” : null , “DateUpdated” : { “$date” : 1381916923120 } , “Description” : “National Careers Service: Actuary” , “Keywords” : “” , “MaxLevel” : null , “MinLevel” : null , “PhoneNumber” : ” ” , […]

C#MongoDB – 如何在多个嵌套数组元素中添加和删除项目?

我在MongoDB中有一个看起来像这样的文档: { “Id”:”123″, “Product”: “test”, “Tags”:[ { “Name”: “name”, “Categories”: [ { //item }, { //item } ] }, { “Name”: “name”, “Categories”: [ { //item }, { //item } ] } ] } 现在,我需要添加一个新Item ,它需要通过其Id添加到该Product的Tags元素的所有类别中。 例如,当我插入Item 3 ,文档应如下所示: { “Id”:”123″, “Product”: “test”, “Tags”:[ { “Name”: “name”, “Categories”: [ { //item 1 }, { //item […]

使用C#BsonArray在MongoDB集合中插入TextMany文档

如何使用C#中的InsertMany()MongoDB方法在Single语句中插入多个文档 我的MongoDB数据库和连接 IMongoClient _client; IMongoDatabase _database; _client = new MongoClient(); _database = _client.GetDatabase(“test”); var collection = _database.GetCollection(“EmpInfo”); 我有一个collections–BsonArray var EmpInfoArray = new BsonArray { new BsonDocument { {“EmpID”, “100”}, {“EmpName”, “John”}, {“EmpMobile”, new BsonArray { new BsonDocument { {“MobNumber”, “55566610”}, {“IsPreferred”, true}, {“IsLive”, false} }, new BsonDocument { {“MobNumber”, “55566611”}, {“IsPreferred”, true}, {“IsLive”, true} }, […]

与使用数组更新运算符$ 的以下查询等效的MongoDB C#驱动程序是什么

来自https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#up。 S [%3Cidentifier%3E] 鉴于以下收集 { “_id” : 1, “grades” : [ { “grade” : 80, “mean” : 75, “std” : 6 }, { “grade” : 85, “mean” : 90, “std” : 4 }, { “grade” : 85, “mean” : 85, “std” : 6 } ] } { “_id” : 2, “grades” : [ { “grade” […]

用C#投影切片

有没有办法使用c#驱动程序在一个查询中实现切片和投影? 下面是我想用c#实现的目标,但即时通讯卡住,任何人都可以帮我解决这个问题吗? db.employee.find({“employeeId”: “999”}, { “empActivity” : { “$slice”: -1 } }, {“employeeId”: 1, “empActivity.transId”: 1, _id: 0}) 注意:empActivity是一个包含嵌套文档的数组,上面的查询通过mongo shell完美地工作,但我无法在C#中找出它的等价物。

使用C#更新mongodb中的嵌入式文档

假设你有下一堂课。 它包含代理已运行的系统 public class AgentHistory { public ObjectId Id { get; set; } public Guid SystemId { get; set; } public Guid CampaignId { get; set; } public List Agents { get; set; } } 现在,当我得到一个新的代理时,我会做下一件事: public override AgentHistory Save(AgentHistory agent) { if (agent == null) throw new ArgumentNullException(“agent”); if (_repository.Exists(agent)) { AgentHistory dbEntity = […]

处理与服务定位器模式一起使用时MongoDB如何存储DateTime

我的同事和我在辩论中处于僵局,其他人的意见将不胜感激。 我们利用服务定位器模式和通用接口来抽象我们的所有数据访问,以便随着需求的变化,我们可以轻松地在不同的数据源之间进行交换。 我们的调用代码没有指示数据的存储位置或方式。 它只是通过服务注册表提供的服务访问数据。 当我们在对象上有DateTime字段并将其存储到MongoDB数据源时,我们正在讨论的问题就出现了。 我注意到的是,当我们在C#中有一个带有DateTime的对象时,它显示为正确的时间。 当我们使用MongoVUE登录MongoDB服务器来检查对象时,它会显示正确的时间。 但是当我们检索对象时,DateTime现在是UTC。 当将内存中的DateTime与从MongoDB数据源检索到的对象中的DateTime进行比较时,这显然会产生问题。 我知道Mongo在内部将DateTime存储为UTC时间。 我甚至理解为什么在你打电话时它可能会返回UTC。 这是辩论开始的地方。 有人建议这只是一个美容问题,只是显示日期时的一个问题。 因此,我们应该简单地在界面层中调用.ToLocalTime。 我不同意并声称这危险地打破了我们在实现服务定位器模式时创建的抽象层。 它还提出了与那些日期时间的交互问题,因为它涉及触发其他事件。 我在其他地方读到的是,我们应该将我们的时间存储为字符串,特别是作为UTC格式的一些标准。 以这种方式,接口层不知道或不关心如何存储DateTime,也不知道我们的对象,因为每个数据源都以相同的方式存储该字符串。 我已经成功使用ISO 1806格式,但我的同事认为这是一个’hacky’修复,使用.toLocalTime是处理这种情况的适当方法。 我对其他人对这个话题的看法很感兴趣。 提前感谢您的意见。

在C#.Net中调用MongoDB存储的Javascript函数

我需要在C#代码中调用MongoDB存储的JavaScript函数。 我存储的JavaScript函数GetUserInfo function() { return db.getCollection(‘Profession’).find({}); } 执行: db.loadServerScripts(); GetUserInfo(); 它返回带有以下文档的Collection(这里我只粘贴了2个文档,实际上我有超过10K的文档) { “_id” : ObjectId(“575845a713d284da0ac2ee81”), “Profession_id” : “575841b313d284da0ac2ee7d”, “Prof_Name” : “Chief Officer” } { “_id” : ObjectId(“575845d213d284da0ac2ee82”), “Profession_id” : “575841b313d284da0ac2ee7d”, “Prof_Name” : “Executive Officer” } 在C#中: IMongoClient _client; IMongoDatabase _database; _client = new MongoClient(); _database = _client.GetDatabase(“SampleDB”); 请帮助我如何在C#代码中调用MongoDB存储的JavaScript函数。 以下问题使用Eval 。 在最新的驱动程序中, 我无法找到扩展函数_database.Eval 通过C#调用MongoDB中的存储过程 请帮助我……