在C#驱动程序中更新mongodb集合比在Shell中更新要慢得多

时间:2019-05-07 13:18:43

标签: c# mongodb

我有一个mongoDb集合,包含大约2万个文档。使用c#驱动程序更新一个文档大约需要250毫秒。但是在查看mongodb日志时,我得到的是“ executionTimeMillisEstimate”:0,因此,如果我理解正确的话,更新会立即发生

有没有一种方法可以减少执行时间,或者执行时间上的差异仅仅是C#驱动程序固有的?

var connectionString = "mongodb://localhost:27017";
IMongoClient client = new MongoClient(connectionString);
var database = client.GetDatabase("Cities");
var collection = database.GetCollection<BsonDocument>("City");

var timespan = DateTime.Now;
//update field result in document with given ObjectId
collection.UpdateOne(
        new BsonDocument{
             {"_id",new ObjectId("56d61033a378eccde8a8354f")}}
        ,Builders<BsonDocument>.Update.Set("result","test"));

Console.WriteLine(DateTime.Now.Subtract(timespan));

2 个答案:

答案 0 :(得分:0)

当您执行new MongoClient()时,需要花费一些时间来建立与数据库的连接。您的第一个操作将需要几百毫秒的时间才能完成。之后的所有操作都应该非常快地完成(由于驱动程序的连接池)。在我的开发机器上,我看到<5ms的插入时间。

因此,请确保您只创建一次client,然后重复使用driver docs中提到的所有后续操作。

答案 1 :(得分:0)

请确保您执行相同的命令。如今,异步方法被认为是现代的。所以,尝试

await collection.UpdateOneAsync(
        new BsonDocument{
             {"_id",new ObjectId("56d61033a378eccde8a8354f")}}
        ,Builders<BsonDocument>.Update.Set("result","test"));