c# Mongo Driver IMongoDatabase运行命令获取数据库统计信息

本文关键字:获取 数据库 统计 信息 命令 运行 Mongo Driver IMongoDatabase | 更新日期: 2023-09-27 18:15:40

IMongoDatabase不支持新版本已弃用的db.GetStats();
我想尝试另一种方法来获取数据库统计信息。我使用以下代码来运行命令,因为我们可以从shell获得统计信息:

var client = new MongoClient("mongodb://localhost:27017/analytics");
var db = client.GetDatabase("analytics");
var stats = db.RunCommand<BsonDocument>("db.stats()");
var collectionNames = db.RunCommand<BsonDocument>
    ("db.getCollectionNames()");

我得到以下错误:

JSON读取器期望一个值,但发现'db'.

需要帮助在Mongo数据库上使用 # driver执行命令,如:

  • db.stats()
  • db.getCollectionNames()

c# Mongo Driver IMongoDatabase运行命令获取数据库统计信息

您可以使用RunCommand方法来获得db.stats()结果,如下所示:

var command = new CommandDocument {{ "dbStats", 1}, {"scale", 1}};
var result = db.RunCommand<BsonDocument>(command);

结果如下:

{
    "db" : "Test",
    "collections" : 7,
    "objects" : 32,
    "avgObjSize" : 94.0,
    "dataSize" : 3008,
    "storageSize" : 57344,
    "numExtents" : 7,
    "indexes" : 5,
    "indexSize" : 40880,
    "fileSize" : 67108864,
    "nsSizeMB" : 16,
    "dataFileVersion" : {
        "major" : 4,
        "minor" : 5
    },
    "extentFreeList" : {
        "num" : 0,
        "totalSize" : 0
    },
    "ok" : 1.0
}

对于db.getCollectionNames();一种方法是使用以下命令:

var command = new CommandDocument { { "listCollections", 1 }, { "scale", 1 } };
var result = db.RunCommand<BsonDocument>(command);
// and to clear extra details
var colNames = result["cursor"]["firstBatch"].AsBsonArray.Values.Select(c => c["name"]);

上面的两个答案都不适合我,但这个可以:

 var command = new BsonDocument { { "dbstats", 1 } };
        var result = db.RunCommand<BsonDocument>(command);
        Debug.WriteLine(result.ToJson());

您可以通过运行以下代码获得db中的所有集合名称:

        String connectionString = "mongodb://your_address_here";
        var client = new MongoClient(connectionString);
        var database = client.GetDatabase("db_name_from_which_you_need_collections");
        var cnames = database.ListCollections();
        var allNames = cnames.ToList();
        foreach(var x in allNames)
        {
            Console.WriteLine(x.ToString());
        }

您可以通过选择x.Values.FirstOrDefault().ToString();

进一步获得独立名称。