C # Mongo Driver IMongoDatabase RunCommand для получения статистики базы данных

IMongoDatabase не поддерживает db.GetStats();, который устарел в новой версии.
Я хочу попробовать альтернативный подход для получения статистики базы данных. Я использую следующий код для запуска команды, поскольку мы можем получить статистику из оболочки:

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

person Muhammad Zeeshan    schedule 31.10.2016    source источник
comment
У меня точно такая же проблема. Вы нашли решение?   -  person EgoPingvina    schedule 12.12.2019


Ответы (3)


Вы можете использовать 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"]);
person shA.t    schedule 21.12.2016

Оба верхних ответа не сработали для меня, но это сработало:

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

Вы можете получить все имена коллекций в базе данных, запустив следующий код: 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 ();

person Shantanu Pandey    schedule 31.10.2016