C#Mongo驱动程序IMongoDatabase RunCommand获取数据库统计信息

时间:2016-10-31 08:49:12

标签: c# mongodb mongodb-.net-driver

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数据库上执行命令,如:

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

3 个答案:

答案 0 :(得分:4)

您可以使用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"]);

答案 1 :(得分:0)

您可以通过运行以下代码来获取数据库中的所有集合名称:x包含集合名称。

        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();

答案 2 :(得分:0)

以上两个答案都对我不起作用,但确实如此:

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